0

I know one could check the existence of a particular method using expression SFINAE in C++11 as follows. What I can't find though, is an example to do the same, checking method arguments as well. In particular I would like to match a method that takes a const parameter.

#include <iostream>

struct A
{
    void method() const
    {
      return;
    }
};


template <typename T, typename = std::string>
struct hasMethod
        : std::false_type
{

};

template <typename T>
struct hasMethod<T, decltype(std::declval<T>().method())>
        : std::true_type
{ };

int main() {

    std::cout << hasMethod<A>::value << std::endl;
}

In reality I would like the hasMethod:: to match

    void method(const Type& t) const
    {
      return;
    } 

What is the syntax to pass to decltype? I have tried:

struct hasMethod<T, decltype(std::declval<T>().method(const int&))>
        : std::true_type

but it obviously doesn't work.

dau_sama
  • 4,247
  • 2
  • 23
  • 30

0 Answers0