C ++ 11標準からの引用(強調鉱山):
8.3.2 参考文献
1 [...] 「<strong>cv voidへの参照」型を指定する宣言子の形式が正しくありません。
補足情報として、このルールはN3421greater<>
提案(将来の C++14 標準に含まれることが既に承認されている) によってvoid
、デフォルトのテンプレート引数として使用されています。
B. デフォルトのテンプレート引数と明示的な特殊化を使用する手法はvoid
、非侵入性のために選択されました。は有効な C++11 ではありません ( 8.3.2 [dcl.ref]/1 で禁止されてgreater<void>
いる への参照を形成しようとします)。void
さらに、ユーザーは標準ライブラリ機構 (17.6.4.2.1 [namespace.std]/1) を特殊化することが許可されていますが、そのような特殊化にはユーザー定義型が含まれている必要があります。
多分私はこれらのマインドゲームにもう少し夢中になっているだけかもしれませんが、なぜこのルールが適用されるかの根拠として、これは私自身の謙虚な意見であることを述べなければなりません-次のコードを検討してください:
sizeof(double&); // Results in double's size
using foo_ref = foo&;
sizeof(foo_ref); // Results in foo's size
sizeof(void); // Error! void has no size!
sizeof(void&); // Error! Tries to get the size of void
最も重要なことは、参照は他のオブジェクトの単なるエイリアスであり、 type のオブジェクトを持つことはできないことに注意してくださいvoid
。