#include <iostream>#include <type_traits>template <typename... Ts> using voID_t = voID;template <typename T,typename = voID>struct has_typedef_foobar : std::false_type {};template <typename T>struct has_typedef_foobar<T,voID_t<typename T::foobar>> : std::true_type {};struct foo { using foobar = float;};int main() { std::cout << std::boolAlpha; std::cout << has_typedef_foobar<int>::value << std::endl; std::cout << has_typedef_foobar<foo>::value << std::endl;}
(摘自https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error)
我对价值成员的来源感到困惑. has_typedef_foobar的两个定义似乎都没有指定名为value的布尔成员.
:: value在哪里获得它的价值?我怀疑它是某种编译器提供的值,并且想要阅读它,但我不确定谷歌的术语,因为我的查询带来了其他与C 11相关的其他与价值相关的主题.
谢谢.
解决方法 std :: true_type和std :: false_type定义为:using true_type = std::integral_constant<bool,true>using false_type = std::integral_constant<bool,false>
分别.也就是说,它们是std :: integral_constant的两个独立实例.
现在,如果你看一下std :: integeral_constant的可能实现:
template<class T,T v>struct integral_constant { ... static constexpr T value = v; ...};
除此之外,您还会看到名为value的静态constexpr变量.当然,如果你将std :: integeral_constant实例化为std :: integral_constant< bool,true>然后将instatiatation中的value成员变量设置为true.以同样的方式,如果你将std :: integral_constant实例化为std :: integral_constant< bool,false>然后它的value成员变量设置为false.
继承自std :: true_type,您还继承了设置为true且继承自std :: false_type类型的值成员变量,您还继承了设置为false的值成员变量.
总结以上是内存溢出为你收集整理的c – “:: value”在哪里获得价值?全部内容,希望文章能够帮你解决c – “:: value”在哪里获得价值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)