从c ++ 11模板参数包创建空指针

Gri*_*zly 3 c++ templates metaprogramming c++11

我正在做一些元编程,现在我需要测试一个给定类型的成员函数是否可以使用给定的参数集来调用,所以我做了类似下面的事情(通过删除一些不重要的东西大大简化了这个特殊的问题当然):

template<typename T, typename... Args>
struct argument_tester {
    struct base: public T { 
        using T::my_member; 
        no my_member(...){}
    };
    typedef decltype(static_cast<base*>(0)->my_member(*static_cast<Args*...>(0))) type;
    //verify return type
};
Run Code Online (Sandbox Code Playgroud)

当然它不起作用*static_cast<Args*...>(0),所以我的问题是是否有任何方法可以将参数包解压缩为解除引用的空指针,或者如果这是我必须专门针对每个参数数量的情况.当然,如果我有办法怎么做呢?我正在使用gcc 4.6,以防有可能和什么不可能.

Mat*_* M. 8

...解包"操作员"可以放置的表达,在这种情况下,表达被扩展外部.

因此,我认为解决方案是(*static_cast<Args*>(0))....

编辑:继R. Martinho Fernandes的暗示之后

typedef decltype(std::declval<base>().my_member(std::declval<Args>()...)) type;
Run Code Online (Sandbox Code Playgroud)