私は、clang 3.3 でコンパイルを開始したことを維持しているコードをいくつか持っています。「-std=c++11」でコンパイルすると、clang でエラーが発生します (以下を参照)。問題のあるコードを次のように抽出しました。
#include <stdio.h>
#define DBG_PRT(__format, ...) \
printf("%s:%d:%s: "__format, __FILE__, \
__LINE__, __FUNCTION__, ## __VA_ARGS__)
int main()
{
DBG_PRT("%s\n", "Hi");
}
これはclangの出力です:
test.cpp:10:5: エラー: タイプ 'const char *' および 'unsigned int' の引数を持つ 'operator "" __format' の呼び出しに一致するリテラル演算子がありません
DBG_PRT("%s\n", "Hi"); ^ test.cpp:4:29: note: expanded from macro 'DBG_PRT' printf("%s:%d:%s: "__format, __FILE__, \ ^ 1 error generated.
文字列リテラルと「__format」の間にスペースがないと、プリプロセッサが __format を展開できるようには見えません。ただし、-std=c++11 を指定しない場合は明らかに. G++ 4.4.7 (-std=c++0x の有無にかかわらず) は問題なくコンパイルされます。
コンパイラにエラーはありますか?