5

これは正当な c++0x 構文ですか?

class A
{
public:
    void some_function( const std::set<std::string> &options = {} );
    // note that this is legal, which binds the const reference to a temporary:
    void some_function( const std::set<std::string> &options = std::set<std::string>() );
}

もしそうなら、GCC 4.6 でバグを見つけたからです。

私が得るエラーは次のとおりです。

エラー: '{' トークンの前にプライマリ式が必要です

これは ... 論理的 ... それが違法だった場合。

更新: @Kerrek が説明したように、これは、集計とそれらの古いブレース初期化構文を使用して、プレーンな C++03 に流れ込みます。なぜこれが不可能なのですか?標準で禁止されていますか?それとも、コンパイラに問題がありますか? それともこれは見落としですか?明示的にコンストラクターを呼び出す代わりにこれを許可することに深刻な問題は見られません。

4

1 に答える 1

7

これは C++11 で有効ですが、Bjarne が提出したワーキング ペーパーへの非常遅い追加でした。したがって、GCC がブレースのデフォルト引数をまだサポートしていないことは驚くべきことではありません。

于 2011-07-07T19:46:40.707 に答える