質問

C ++ 14のメンバー関数に対して、または無料の機能に対してのみ収益タイプの控除が許可されていますか?

私はそれが機能すると暗黙的に想定しているので、私は尋ねますが、GCC 4.8.1では、内部コンパイラエラー( "in gen_type_die_with_usage")を取得します。初めてそのような不可解なエラーを受けたことがあるので、私は少し懐疑的です。そして、私は彼らがそれ以来スペックを変更したことを知っています。

明確さのためにこれは私にとってうまくいきます:

auto foo() {return 5;}

しかし、これはそうではありません:

class Bar{
auto baz() {return 5;}
}

これはドラフト基準で許可されていますか?

役に立ちましたか?

解決

はい、標準は論文に従ってそれを許可する必要があります N3582. 。これが論文の例です。

自動リターンタイプで非定義関数宣言を許可することは厳密に必要ではありませんが、クラス外のメンバー関数を定義することを好むコーディングスタイルに役立ちます。

    struct A {
      auto f(); // forward declaration
    };
    auto A::f() { return 42; }

そして、そのような状況でそれを許可する場合、それは他の状況でも有効でなければなりません。それを許可することは、より多くの直交の選択でもあります。一般的に、2つの機能を組み合わせることで機能する場合は、機能するはずだと思います。

@Bamboonのコメントによると、「リターンタイプの控除はGCC 4.9の時点でのみサポートされています。」だからそれはあなたがそれを持っていない理由を説明するでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top