2016-06-23 1 views
6

C++ 11 또는 C++ 14에서는 constexpr 함수에 대한 유형 별칭을 정의하려고합니다.constexpr 함수에 유형 별칭을 정의 할 수 있습니까

#include <iostream> 
constexpr int foo(int i, int j) { return i + j; } 
using TConstExprFunction = constexpr int (*)(int i, int j); 

int main() { 
    TConstExprFunction f = foo; 
    constexpr int i = f(1, 2); 
    std::cout << i << std::endl; 
} 

을하지만 g ++ 및 그 소리 ++로 컴파일에 실패 :

나는 시도했다.

그램 ++ : error: expected type-specifier before 'constexpr'

그 소리 ++ : error: type name does not allow constexpr specifier to be specified

나는 그것이 '의 오류 메시지 ++ 그 소리에서

#include <iostream> 
constexpr int foo(int i, int j) { return i + j; } 
using TConstExprFunction = int (*)(int i, int j); 

int main() { 
    constexpr TConstExprFunction f = foo; 
    constexpr int i = f(1, 2); 
    std::cout << i << std::endl; 
} 

를 컴파일하기 위해 다음과 같이해야 할, 내가가 constexpr를 사용하지 않을 수 있습니다 보인다 이름을 입력하십시오.

따라서 constexpr 함수에 대한 유형 별칭을 정의 할 수 있습니까? 그렇다면 어떻게?

+3

거기에'static'을 사용할 수없는 것처럼 ... –

+0

"* 그래서 constexpr 함수에 타입 별칭을 정의 할 수 있습니까?"하나의 타입 별칭을 가질 수 있습니다. 하나의 함수를 통해 컴파일 타임 상수 표현식 인 것처럼 함수를 호출 할 수 없습니다. 그래서 당신이 원하는 효과는 불가능합니다. –

+0

@MarcGlis 그것은 의미가 있습니다. – Mine

답변

7

표준 C++ 7.1.5/P8에 따른 constexpr 지정자 [dcl.constexpr] (강조 광산) 다음 constexpr 지정자는 constexpr의 종류에 영향을주지

함수 또는 constexpr 생성자. 7 선언 [dcl.dcl]에서도

:

alias-declaration: 
using identifier attribute-specifier-seqopt = defining-type-id ; 

constexpr 지정자 함수의 형태의 일부가 아니다. 따라서, 당신은 할 수 없습니다

using TConstExprFunction = constexpr int (*)(int i, int j); 

를 유형이 예상되는 using TConstExprFunction = 후입니다.

1

constexpr 함수에 형식 별칭을 정의 할 수 없습니다.

+0

C++ 표준이 이것을 지원하지 않는 특별한 이유가 있습니까? – Mine

관련 문제