Ошибка MSVC: класс шаблона с членом int64_t - «за которым следует __int64, это незаконно»C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка MSVC: класс шаблона с членом int64_t - «за которым следует __int64, это незаконно»

Сообщение Anonymous »

Работая над кросс-компиляцией этого FLOSS, я пытаюсь скомпилировать простой класс шаблона, который использует int64_t в качестве параметра шаблона, но MSVC (Visual Studio 2019) выдает мне ошибки об использовании недопустимого типа. Вот минимальный пример:

Код: Выделить всё

#include 

class test_class {
public:
template
class inner_class {
private:
T value;
public:
inner_class() : value(T()) {}
bool operator==(const inner_class& other) const {
return value == other.value;
}
};

inner_class _int64;  // Error here
};

int main() {
test_class t;
return 0;
}
При компиляции с помощью:

Код: Выделить всё

cl.exe /std:c++17 /EHsc /W4 test.cpp
Я получаю следующие ошибки:

Код: Выделить всё

error C2628: 'test_class::inner_class' followed by '__int64' is illegal (did you forget a ';'?)
error C2208: 'test_class::inner_class': no members defined using this type
Я пробовал использовать std::int64_t явно, а также пытался создавать псевдонимы типов, но все равно получал аналогичные ошибки. Код отлично компилируется с помощью GCC и Clang.
Версия Visual Studio:

Код: Выделить всё

Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30156 for x64
Что я пробовал
  • Использование явного пространства имен std:::

Код: Выделить всё

inner_class _int64;
  • Использование псевдонимов типов:

Код: Выделить всё

using int64_type = std::int64_t;
inner_class _int64;
  • Добавление ключевого слова typename:

Код: Выделить всё

inner_class _int64;
Все выдают одинаковые или похожие ошибки. Что я делаю неправильно? Это проблема, специфичная для MSVC?


Подробнее здесь: https://stackoverflow.com/questions/791 ... is-illegal
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»