При использовании нового синтаксиса декларатора функций и 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
с тем же типом, что и класс, что имеет две проблемы:
this
. decltype
, иначе он не видит члена (хотя это больше похоже на ошибку компилятора).