문제의 설명은 매우 쉽습니다 ... 나는 열거 형 템플릿 클래스 (내가 선호하는) 및 내 응용 프로그램에 대한 필요가 있습니다. 이 열거 형에 대해 연산자 >>() 함수를 정의 할 수 있어야합니다.콘솔에서 읽기 : 연산자 >> 열거 형 템플릿 클래스 내
그러나 Visual Studio에서는 Microsoft C/C++ 최적화 컴파일러가 작동하지 않는 문제가 발생합니다. 즉 :
#include <iostream>
#include <stdexcept>
template <typename T>
struct S{
enum X { X_A, X_B, X_C };
template <typename U>
friend std::istream& operator>>(std::istream& in, enum S<U>::X& x);
};
template <typename U>
std::istream& operator>>(std::istream& in, enum S<U>::X& x)
{
int a;
in >> a;
x = S::X(a);
return in;
}
int main()
{
S<int> s;
S<int>::X x = S<int>::X_A;
std::cout << "Input: ";
std::cin >> x;
std::cout << "Output: " << x << std::endl;
}
이 문제를 해결에 어떤 도움이 많이 주시면 감사하겠습니다 : 오류를 재현
예제 코드 "내부 오류가 컴파일러에서 발생했습니다!" 나 자신 당신은 x = S<U>::X(a)
에 x = S::X(a);
을 변경해야
은'enum'는 유형 이름이 S '매개 변수 목록에 필요하지만, 아마도되지 : X &'잘 작동합니다. –
이 추론 할 수없는 문맥이 아닌가? – visitor
'typename'은 컴파일러의 충돌을 막아 주었지만, 이제는'std :: cin >> x'를 포함하는 행에서 _no 연산자가 발견되었습니다. 불평합니다. – Stonegoat