8

-std=c++1y を使用して、g++ でサポートされている戻り値の型の推論で遊んでいます。
明示的な戻り値の型を使用して関数のプロトタイプを作成し、後で戻り値の型推定を使用して関数を定義しようとすると、コンパイラはあいまいな古い宣言について警告します。

std::string some_function();
...  
auto some_function(){ return std::string{"FOO"}; } //fails to compile

これが機能しない正当な理由はありますか?
定義で戻り値の型推定を使用する理由は、コードをクリーンに保ちながら、自己文書化の理由からプロトタイプに明示的な型を必要とするためです。戻り値の型の推論を使用する場合と使用しない場合のベストプラクティスに関する推奨事項をいただければ幸いです:)

より明確にするために、次の回答をお願いします
。 1. これはコンパイラの実装ミスですか? (そうではないことはかなり確信しています)
2. この種の控除を行うことはできますが、標準への提案では許可されていませんか? もしそうなら、なぜですか?
3. これが本当にあいまいである場合、型を推測し、それを明示的な前方宣言と一致させようとすると問題が発生する例は何ですか?
4. この背後には、より深い実装固有の問題がありますか?
5. 単なる見落としですか?

4

2 に答える 2

-2

次のようにする必要があります。

auto some_function() -> decltype(std::string) { return std::string{"FOO"}; } 

詳細については、http://en.wikipedia.org/wiki/C%2B%2B11を参照してください-> 代替関数構文

于 2013-08-29T19:43:12.620 に答える