Следующее компилируется без ошибок:
template<int j, int i>
struct TemplateClass {
int arr[i];
};
struct A {
inline static constexpr int n = 123;
};
template<int j> struct B {
void func() {
A a;
TemplateClass<j, a.n> c;
}
};
int main() {
B<456> b;
b.func();
}
Однако при компиляции с помощью GCC мы получаем ошибку "использование 'this' в постоянном выражении", если мы делаем переменную-член переменной A a
в функции func
, как это:
template<int j> struct B {
A a;
void func() {
TemplateClass<j, a.n> c;
}
};
Компиляция с помощью MSVC не дает ошибок. Сравните два компилятора,
- Я не понимаю, почему это дает ошибку. Это ошибка?
- Есть ли способ обойти эту ошибку?
A::n
? - person Fantastic Mr Fox   schedule 11.03.2019decltype(a)::n
тоже работает. - person Carucel   schedule 11.03.2019