次のようなコードがあるとします。
template <typename T>
CLASS_KEY1 X{};
PREFIX template CLASS_KEY2 X<int>;
ここでCLASS_KEY1
、CLASS_KEY2
とPREFIX
はマクロです。CLASS_KEY1
、またはキーワードにCLASS_KEY2
拡張できます。空の文字セットまたはキーワードに展開できます。class
struct
union
PREFIX
extern
マクロ値のすべての組み合わせ (コンパイラ gcc-4.8.1、オプション)について、そのようなコードがいつコンパイルされるか ( Yes
- コンパイルされる、No
- コンパイルされない)を示す表を次に示します。-std=c++11
PREFIX extern extern extern
CLASS_KEY1\CLASS_KEY2 class struct union class struct union
class Yes Yes? No Yes Yes? No
struct Yes? Yes No Yes? Yes No
union No No Yes No No Yes
これは gcc のバグですか、それとも標準要件ですか (奇妙なケースには疑問符が付いています)。他のコンパイラはどうですか?