Почему я не могу объявить статическую переменную constexpr в классе шаблона, используя msvc? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть шаблонный класс, и я хочу объявить статическую переменную 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: использование неопределенного типа «Тест»

1 Ответ

1 голос
/ 24 мая 2019

До последнего } тип шаблона Test является неполным.

Вот очень похожий вопрос , который добавляет третий компилятор. Как видите, в ответе говорится, что VC ++ и clang уважают стандарт, а gcc - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...