문제

나는 컴파일할 수 없습니다 이에 VS2013 지만,컴파일에 gcc4.7.2.내가 이해하는 VC++은 뒤쳐 GCC 와 그 소리의 관점에서 기능이 있지만,어떤 기능은 정확하지 않을 경우 이것이 버그가 아닌가?

template <int N>
struct factorial
{
    static const long value;
    static const long previous = factorial<N - 1>::value; //C2057: expected constant expression
};

template <int N>
const long factorial<N>::value = N*factorial<N - 1>::value;

template <>
struct factorial<0>
{
    static const long value = 1;
};

저에게 말하지 말라 나는 어떻게 얻을 수 있는 해결 방법이 이 문제의 원인이 생산 코드를 어느 하나가 필요합니다.예를 들어 내가 할 수 있을 정의 값은 클래스에서 문제가 해결되지만,다고 가정하자 나는 그것을 정의 외부 클래스(VC2013 여전히 지원하지 않 constexpr 을 사용)

도움이 되었습니까?

해결책

MSVC 지 두 단계는 템플릿을 컴파일할 수도 있습니다.GCC 제대로 보고 factorial<N - 1>::value 종으로 이름을 해결하고 두번째 단계에서,하지만 MSVC 그것을 할 수있다 첫 번째 단계입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top