次の例を検討してください。
#include <iostream>
#include <string>
struct foo { std::string value; };
inline foo bar() { return { "42" }; }
std::string my_func() {
auto &x = bar();
^^^^^^^^^^^^^^^^
return x.value;
}
int main() {
std::cout << my_func() << std::endl;
}
GCCとCLANGの両方をコンパイルすると、おそらく当然のことながら、同じエラーが発生します。
エラー: タイプ 'foo' の右辺値からのタイプ 'foo&' の非 const 参照の無効な初期化
しかし、驚いたことに、VC++2015 では問題なくコンパイルおよび実行されます。
- これは VC++2015 のバグですか?
- ステートメントがプログラムを不適切な形式にする場合、標準はオブジェクトに
auto
暗黙的に追加できると規定していますか?const