を考えてみましょう宣言されfollowing code:decltype:エラー「参照」メンバーの前に使用
struct test {
auto func() -> decltype(data) {} // ERROR
int data;
};
int main() {
test t;
t.func();
}
それは、次のエラー与える:私は上記のdata
を配置する場合は、しかし、
main.cpp:2:29: error: 'data' was not declared in this scope
auto func() -> decltype(data) {}
をfunc()
、エラーなし(live code):
struct test {
int data;
auto func() -> decltype(data) {}
};
...
そして、私の質問は、なぜdecltype
は、(decltype
が定義ではなくメソッド宣言で使用されている)メンバーの後ろに宣言されていないと考えているのですか?将来の言語標準の反復でこの動作に変更があるかどうかを知りたいと思っています。
私は異なる動作をする
decltype
を期待していたので、私はこれを求めていることに注意してください。私のコーディング規約では、クラスデータメンバをクラス関数の下に配置します。確かに、この異なる振る舞いは、私がどのようにクラスメンバーを編成するかに影響します。あなたのコーディング規則を維持するための回避策を提供できるなら、非常に感謝します。
申し訳ありません - Cから継承されたC++の性質を、 –
これは 'decltype'だけではなく、単純な' typedef'でも[同じ動作](http://coliru.stacked-crooked.com/view?id=8f959fbd70b0b7d44c21ff0d71967fd5-6f7ec8a47f20223a17b26973b6e13527)を示しています。 'typedef'をメンバ関数定義の上に移動すると、明らかに問題が解決されます。 – Praetorian
@Praetorianそれは固有の問題です...あまりにも悪いです。 –