MSVC10 SFINAE 导致致命错误而不是替换失败
我这里有一个(相对)简短的代码示例。 #include <type_traits> template<typename T> class function template<typename Ret> class fun…
使用 decltype/SFINAE 检测运算符支持
一篇(有些)过时的文章探讨了使用decltype 与 SFINAE 一起检测类型是否支持某些运算符,例如 == 或 <。 下面是检测类是否支持 < 运算符的示例代…
SFINAE 未检测到 T::reference
std::vector 类是 STL 容器概念的模型,因此任何正确的向量实现都必须包含嵌套的 typedef value_type 以及参考。这应该可以使用 SFINAE 检测到。不过…
使用 SFINAE 检查全局运算符<<?
我想要几个重载的全局 to_string() 函数,它们接受某种类型 T 并将其转换为其字符串表示形式。对于一般情况,我希望能够编写: template<typename T…
使用SFINAE原则时重载函数是不明确的
我遇到了一些用 VS7.1 编写的代码,现在我正在尝试让它适用于 MacOSX。我理解的下面的代码片段是关于SFINAE原则的。据我了解,代码用于在编译时通过依…
SFINAE:检测类是否有自由函数
有没有办法使用 SFINAE 来检测给定类的自由函数是否重载? 基本上,我有以下解决方案: struct has_no_f { } struct has_f { } void f(has_f const&am…
是否可以使用 SFINAE/模板来检查操作员是否存在?
我试图检查一个运算符在编译时是否存在,如果不存在我只想忽略它,有什么办法可以做到这一点吗? 示例运算符: template <typename T> QDataStrea…
SFINAE 编译器问题
我的以下代码应该检测 T 是否有 begin 和 end 方法: template <typename T> struct is_container { template <typename U, typename U::const_…
使用 decltype() 和 SFINAE 时出错
为了回答..某个地方的其他问题,我编写了这段代码。 struct no_type{} template<typename T> struct has_apply { static decltype(T().apply<0u…
如何使用enable_if根据类的模板参数启用成员函数
在代码中: template<class T> struct is_builtin { enum {value = 0} } template<> struct is_builtin<char> { enum {value = 1} } temp…
为什么以下 SFINAE 测试无法检测到模板成员函数?
使用 GCC 进行编译时,我从以下代码中得到的总是 false。我相信这是一个编译器错误,但有人可能更了解。 #include <iostream> template< class …