次の例はコンパイルされ(VS2010 C ++コンパイラは警告C4353を発行します)、式(*)は次のように評価され0
ます。
#include <iostream>
#include <string>
int main()
{
0(1, "test"); // (*) - any number and type of arguments allowed
int n = 0(1, "test"); // 0
std::string str(0(1, "test")); // Debug assertion fails - 0 pointer passed
}
0
C ++標準で許可/規制されている関数名として使用していますか、それともその解像度はコンパイラ固有ですか?N3242ドラフトを調べていましたが、これに関連するものは見つかりませんでした。Microsoftコンパイラは、明らかにそのような構成(または__noop
)を値を持つ整数として解決します0
。
警告C4353:
警告C4353:非標準の拡張が使用されました:関数式として定数0。代わりに__noop関数組み込みを使用してください