Почему MSVC не работает с T?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Почему MSVC не работает с T?

Сообщение Гость »


У меня есть что-то вроде:

#include #include использование пространства имен std; пространство имен SMSpp_di_unipi_it { #define SMSpp_insert_in_factory_h \ статический класс _init {public: _init(); } _инициализатор; \ const std::string & Private_name() const; \ статическая константа std::string & _private_name() пространство имен SMSpp_type_traits { шаблон структура т; шаблон структура t< T( U ) > { используя тип = U; }; } inline std::string && SMSpp_classname_normalise(std::string && str) { str.erase( std::remove_if( str.begin() , str.end() , ::isspace ) , стр.конец() ); while( str.front() == '(' ) { стр.pop_back(); str.erase(0, 1); } return(std::move(str)); } #define SMSpp_insert_in_factory_cpp_1_t(ИмяКласса) \ шаблон \ const std::string & \ SMSpp_type_traits::t::type::_private_name(void) { \ static const std::string _name( SMSpp_classname_normalise( \ std::string(#ClassName)); \ возврат (_имя); \ } \ \ шаблон \ const std::string & \ SMSpp_type_traits::t::type::private_name(void) const { \ return( SMSpp_type_traits::t::type::_private_name() ); \ } \ } используя пространство имен SMSpp_di_unipi_it; шаблон < класс T = void , int i = 0 > класс DummyBlockT { публика: DummyBlockT( ) {} частный: SMSpp_insert_in_factory_h; }; SMSpp_insert_in_factory_cpp_1_t( ( ( ( ( DummyBlockT< std::pair< double , int > > ) ) ) ); интервал основной() { вернуть 0; } Когда я компилирую его с помощью gcc или clang, все работает хорошо. Но если я попытаюсь скомпилировать с MSVC, вызов:

SMSpp_insert_in_factory_cpp_1_t( ( ( ( ( DummyBlockT< std::pair< double , int > > ) ) ) ); сгенерировать эту ошибку:

C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2059: синтаксическая ошибка: ')' [C:\smspp-project\cmake-build-debug\SMS++ \SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2062: неожиданный тип «неизвестный тип» [C:\smspp-project\cmake-build-debug\SMS++\SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2039: «тип»: не является членом «глобального пространства имен» [C:\smspp-project\cmake-build- отладка\SMS++\SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C3083: ' C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2039: «_private_name»: не является членом «глобального пространства имен» [C:\smspp-project\cmake-build- отладка\SMS++\SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2143: синтаксическая ошибка: отсутствует ';' перед '{' [C:\smspp-project\cmake-build-debug\SMS++\SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2447: '{': отсутствует заголовок функции (формальный список старого стиля?) [C:\smspp-project\cmake-build- отладка\SMS++\SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2039: «private_name»: не является членом «глобального пространства имен» [C:\smspp-project\cmake-build- отладка\SMS++\SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2988: нераспознаваемое объявление/определение шаблона [C:\smspp-project\cmake-build-debug\SMS++\SMS++.vcxproj] C:\smspp-project\SMS++\src\Configuration.cpp(37,1): ошибка C2059: синтаксическая ошибка: '}' [C:\smspp-project\cmake-build-debug\SMS++\SMS++.vcxproj] . . . Как я могу решить проблему для MSVC без псевдонима DummyBlockT< std::pair< double , int > >/code>, используя определение типа перед вызовом SMSpp_insert_in_factory_cpp_1_t? Или, если есть способ снять псевдоним с typedef, чтобы статически возвращать точное имя DummyBlockT< std::pair< double , int > >, а не имя псевдонима?
Ответить

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

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

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

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

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