Описание проблемы довольно простое ... У меня есть перечисление, помещенное в шаблонный класс (который я предпочитаю), и для моего приложения я должен быть в состоянии определить функцию operator >> () дляэто перечисление ...
Это, однако, создает проблему в 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;
}
Любая помощь в решении этой проблемы будет принята с благодарностью!Я сам предположил бы, что, поскольку класс является шаблонным, перечисление как-то определяется несколько раз ...