Для включения элементов условных данных я использую специализированные шаблоны вместо пространств имен, а затем перегружаю оператор присваивания в каждой специализации.Во время компиляции переменные-члены специализаций не распознаются.Я не понимаю, почему, и ничего не могу найти в интернете.
enum Def : int {A, B};
template<Def T>
struct X {};
// Forward declaration does not help, like it would in non-template implementations.
/*
* template<>
* struct X<B>;
*/
template<>
struct X<A>
{
int a;
int b;
X<A> & operator = (const X<B> & obj)
{
a = obj.a;
b = obj.b;
}
}
template<>
struct X<B>
{
int a;
int b;
int c;
int d;
X<B> & operator = (const X<A> & obj)
{
a = obj.a;
b = obj.b;
}
}
Теперь, когда происходит компиляция, я получаю ошибку, что X<B>
не имеет члена с именем a
и b
.В чем здесь проблема?