私はコーディングをしていて、定数参照とそのデフォルト値の間のスペースを誤って省略していました。Intellisenseでエラーとして表示されたのを見て驚いたので、コンパイルしました。確かに、GCC 4.3.4、4.5.1、または4.7.2では機能せず、 VisualStudio2012も。
エラーを示す同等のサンプルを次に示します。
struct S {
S(const int &= 5){}
};
int main(){}
これにより、GCCでは次のエラーが発生し、MSVCでは同様のエラーが発生します。
エラー:「&=」トークンの前に「、」または「...」が必要です
これは&=
、が演算子として扱われているためだと思いますが、このケースに関する詳細情報を見つけるために、標準で何を検索すればよいか正確にはわかりません。&=は、オペレーター固有の情報を考え出すだけです。
興味があったので、右辺値の参照と交換することにしました。
S(int &&= 5){}
不思議なことに、これはGCC 4.7.2とMSVCの両方で正常にコンパイルされます。つまり、&=は常に演算子として字句的にペアになっているわけではありません。
なぜ左辺値参照ではなく右辺値参照で機能するのですか?また、標準はこの問題について何と言っているのですか?