新しい関数宣言子の構文とdecltype
を使用する場合、どのように一つのアクセスのメンバーがいますか?C++のアクセス、この中の新機能宣言子構文
template <typename Func>
struct context_binder
{
public:
context_binder(const Func& func) :
func(func)
{ }
template <typename... TArgs>
auto operator()(TArgs&&... args) const
-> decltype(this->func(std::forward<TArgs>(args)...))
{
return func(std::forward<TArgs>(args)...);
}
private:
Func func;
};
これはコンパイラエラーを生成:
scratch.cpp:34:25: error: invalid use of ‘this’ at top level
私のコンパイラがg++ 4.6.2
あるthis
にアクセスできないことが表示されます。
私の問題を回避するには、静的メンバは、2つの問題があるクラスと同じタイプ、とself
と呼ば宣言することです:
this
が希望のようにそれは、自動的にCV-修飾子をピックアップしません。 。- 会員宣言をの
decltype
の使用以上に移動する必要があります。メンバーが表示されない場合もあります(これはコンパイラのバグのようですが)。 GCC 4.7から
私は...これは私が標準文書を読むために私の能力の私すでに不安定な自信を問う作っていたうれしいです。 –
@TravisGockel:一般的には、標準の文書の読者がGCC(またはこの時点でコンパイラ)と矛盾していると、読者の読解よりもコンパイラである可能性が高いと想定してください。 –