C++ Access this in New Function Declarator Syntax

При использовании нового синтаксиса декларатора функций и decltype, как осуществляется доступ к членам? Похоже, что this недоступен:

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.


Мой обходной путь - объявить статический член self с тем же типом, что и класс, что имеет две проблемы:

  1. Он не будет автоматически подхватывать CV-квалификаторы, как это делает this.
  2. Мне приходится перемещать объявления членов выше использования decltype, иначе он не видит члена (хотя это больше похоже на ошибку компилятора).
5
задан Travis Gockel 21 February 2012 в 21:21
поделиться