Używam przestarzałego Visual Studio 2008 (pozwól, że zaoszczędzę ci kłopotu "jest twój problem".) To wydaje się być problemem z Visual Studio:
http://rextester.com/XKFR77690
To wydaje się być problemem z assert
makro: http://ideone.com/bhxMi0dynamic_cast w asercie Błąd powodujący błąd
Biorąc pod uwagę te kodowanym:
struct base { virtual ~base() {} };
template <typename T>
struct Foo : base { T foo; };
mogę to zrobić:
base* test = new Foo<pair<int, int>>;
if(dynamic_cast<Foo<pair<int, int>>*>(test) != NULL) cout << "hello world\n";
Ale gdy używam dokładnie ten sam kod, jak jest w if
-statement w assert
: assert(dynamic_cast<Foo<pair<int, int>>*>(test) != NULL)
pojawia się błąd:
warning C4002: too many actual parameters for macro
assert
error C2143: syntax error : missing ',' before ')'
Nawiasem mówiąc można to naprawić za pomocą obsady C-style: assert((Foo<pair<int, int>>*)(test) != NULL)
ale myślę że obsada stylu C zrobi static_cast
, a nie dynamic_cast
, której nie chcę.
Odp: "odpowiedz pode mnie" - WIĘC przeorganizowuje odpowiedzi w zależności od różnych czynników, więc "poniżej" i "powyżej" może się zmienić. W tej chwili na przykład nie widzę żadnej odpowiedzi poniżej twojej, ale widzę jedną nad nią. –
@PeteBecker Spędziłem 20 sekund szukając właściwego słowa i * poniżej * było moim ostatnim kursem ... – DeiDei
@DeiDei Po prostu połącz odpowiedź. –