元函数接受要在模板中检查的类型。如果在 Method<given_type> 上定义了括号运算符,则元函数必须返回 true。否则为假。
#include <iostream>
#include <functional>
template<typename T>
struct Method {};
template<>
struct Method<int> {
int operator()() { return 1; }
};
template<class T>
struct is_brackets_op_defined {
static void Check(...);
template<typename C>
static decltype(Method<C>::operator()) Check(const C&);
using type = decltype(Check(
std::declval< Method<T> >()
));
constexpr static bool value =
!std::is_same<void, type>();
};
int main() {
std::cout << is_brackets_op_defined<float>::value << std::endl;
}
即使存在特化,我的实现也总是返回 false(此处为 int)
std::cout << is_brackets_op_defined<float>::value // false
std::cout << is_brackets_op_defined<int >::value // false