Я использую устаревшую Visual Studio 2008 (позвольте мне избавить вас от проблемы "там ваша проблема".) Это, похоже, проблема с Visual Studio: http://rextester.com/XKFR77690 Кажется, что проблема связана с макросом assert
: http://ideone.com/bhxMi0
Учитывая эти структуры:
struct base { virtual ~base() {} };
template <typename T>
struct Foo : base { T foo; };
Я могу это сделать:
base* test = new Foo<pair<int, int>>;
if(dynamic_cast<Foo<pair<int, int>>*>(test) != NULL) cout << "hello world\n";
Но когда я использую тот же самый код, что и в if
-statement в assert
: assert(dynamic_cast<Foo<pair<int, int>>*>(test) != NULL)
, я получаю сообщение об ошибке:
предупреждение C4002: слишком много фактических параметров для макроса
assert
ошибка C2143: синтаксическая ошибка: отсутствует ',' before ')'
Кстати, я могу исправить это, используя C-стиль: assert((Foo<pair<int, int>>*)(test) != NULL)
Но я думаю, что C-Style будет делать static_cast
не a dynamic_cast
, который я не хочу.