我在库实现中看到了这个表达式,我基本上理解它被用来促进SFINAE,甚至是用来扣动static_assert触发器。
它基本上采取如下形式:
template <typename>
char (&checkValid(...))[2];
template <typename T>
char checkValid(e); where e is an expression(using type T) results in type X 如果e格式良好,则结果将为(假定使用sizeof) 1 of 2,并可应用于:
static_assert(sizeof(checkValid<T>(0))==1,"") ;
前几天,我用另一种方式做了类似的事情:
using namespace std;
template<typename...T>
using isValid = void;
template<typename>
false_type checkValid(...);
template<typename T>
true_type checkValid(isValid<typename T::type>*);
struct some{
using type = int;
};
int main(){
constexpr bool result = decltype(checkValid<some>(0))::value;
}不管我做了什么,看到了什么,我更想知道:
这句话叫什么?
template <typename>
char (&checkValid(...))[2];“可变模板”?“函数模板”或者“一个引用.的数组”?(如果我猜得很糟糕,很抱歉)
发布于 2018-06-16 14:50:59
它是一个函数模板,返回对char[2]的引用。
checkValid // `checkValid` is
checkValid(...) // a function with (...) parameter list, returning
&checkValid(...) // a reference to
(&checkValid(...)) // (discard parentheses)
(&checkValid(...))[2] // an array of 2
char (&checkValid(...))[2] // characters.
template <typename> char (&checkValid(...))[2]; // And it's a template.https://stackoverflow.com/questions/50888890
复制相似问题