[Bug c++/58569] Compilation error when a class contains multiple std::function

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 1 08:10:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58569

--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Somewhat reduced:

#include <type_traits>

template<typename _Functor>
  inline _Functor&
  __callable_functor(_Functor& __f)
  { return __f; }

template<typename S> struct Function;

template<typename R, typename... A>
struct Function<R(A...)>
{
  template<typename F>
    using Invoke = decltype(__callable_functor(std::declval<F&>())
                            (std::declval<A>()...) );

  template<typename CallRes, typename Res1>
    struct CheckResult
    : std::is_convertible<CallRes, Res1> { };

  // template<typename CallRes> struct CheckResult<CallRes, CallRes> :
std::true_type { };

  template<typename F>
    using Callable = CheckResult<Invoke<F>, R>;

  template<typename Cond, typename T>
    using Requires = typename std::enable_if<Cond::value, T>::type;

  template<typename F, typename = Requires<Callable<F>, void>>
    Function(F);

  Function();

  R operator()(A...) const;
};

struct foo {
  Function<foo (int)> x;
  Function<foo ()> y;
};

int main() {
  foo a;
}



More information about the Gcc-bugs mailing list