私は旧式のVisual Studio 2008を使用しています(「あなたの問題があります」という問題を解決します)。これはVisual Studioの問題です。
http://rextester.com/XKFR77690
これは問題があるようですhttp://ideone.com/bhxMi0アサートでdynamic_castがエラーを引き起こします
を考えると、これらの構造体:assert
マクロで
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";
しかし、ときassert
にif
-statementであると私はまったく同じコードを使用します。assert(dynamic_cast<Foo<pair<int, int>>*>(test) != NULL)
私はエラーを取得する:
warning C4002: too many actual parameters for macro
assert
error C2143: syntax error : missing ',' before ')'
ちなみに私はCスタイルのキャストを使用してこの問題を解決することができますassert((Foo<pair<int, int>>*)(test) != NULL)
をしかし、私は考えますC-Styleのキャストはstatic_cast
で、私が欲しくないのはdynamic_cast
ではありません。
Re: "answer below me" - SOはさまざまな要因によって回答を並べ替えますので、「下」と「上」が変更される可能性があります。今のところ、私はあなたの下に何の答えも見ませんが、私はそれの上に1つを見ます。 –
@PeteBecker私は20秒間正しい言葉を探して、*以下が*私の最後の手段だった。 – DeiDei
@DeiDei答えにリンクするだけ。 –