Следующие компиляции без ошибок:
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 не дает ошибок. Сравните два компилятора ,
- Я не понимаю, почему это дает ошибку. Это ошибка?
- Есть ли способ обойти эту ошибку?