У меня есть шаблонный класс, и я хочу объявить статическую переменную constexpr того же типа, что и класс. С компилятором GNU он работает просто отлично, но с
Microsoft Visual Studio, не компилируется. Я делаю что-то не так, и это просто компилятор GNU, который очень добр ко мне, или это виноват компилятор Microsoft?
Я знаю, что могу исправить это, изменив переменную для функции, которая делает то же самое, но мне любопытно.
template <typename T>
constexpr T One() noexcept { return static_cast<T>( 1 ); }
template <typename T>
struct Test {
T val;
static constexpr Test example{ One<T>() }; // compiles only with gnu
static constexpr Test Example() { return Test{ One<T>() }; } // compiles with both gnu and microsoft
};
Данная ошибка (Visal Studio 2017):
ошибка C2017: использование неопределенного типа «Тест»