sfinae 相关问题

替换失败不是错误。这是一种C ++编程技术,允许模板验证有关其模板参数的属性,从而允许在某些类型的对象可用时使用不同的特化。

c ++ enable_if-SFINAE

我试图理解enable_if,cppreference.com上有一个示例,这种使用比函数重载有什么好处?下面的代码部分正在做同样的事情。结构T {枚举{...

回答 2 投票 0

[C ++ 17测试数据成员SFINAE:gcc与clang

我有一个简单的代码片段,我正在尝试测试数据成员:#include template 使用is_data_member = std :: bool_constant ] >

回答 1 投票 1

如果两者都可行,编译器如何在使用SFINAE的函数和标准函数之间进行确定?

请考虑以下代码:#include #include template class A {public://如果T是T2的const版本,则允许调用func // ...

回答 1 投票 0

decltype(1,t)应该是左值参考吗? (编译器不同意)

最小代码:int t; static_assert(is_same_v );上面的代码在g ++和clang ++中编译,但在MSVC中失败。 MSVC似乎在想:int t; static_assert(is_same_v ] >>>> Gcc和Clang是正确的。 1, t是comma expression, 逗号表达式结果的类型,值和值类别恰好是第二个操作数E2的类型,值和值类别。 第二个操作数,即t是一个左值,那么decltype将得出decltype。 如果表达式的值类别为左值,则decltype产生T&; 根据标准,T&: (重点是我的) 结果的类型和值就是右边的类型和值操作数结果与它的权利属于同一值类别操作数 , 和[expr.comma]/1 否则,如果[dcl.type.decltype]/1.5是左值,则e是decltype(e),其中T&是类型的T;

回答 1 投票 2

“ SFINAE反向,以避免模棱两可的过载

如果第二个模板实例化,如何防止下面的第一个模板实例化? (即是否同时定义了static_cast (0)和T :: zero())template auto ...

回答 1 投票 0

std :: is_copy_constructable for std :: vector

我最近阅读了这篇博客文章,介绍了为什么必须无条件地复制vector以便可以支持不完整的类型。我了解从逻辑角度来看也是必须的,因为...

回答 1 投票 2

检查类型是否直接从“如果……启用时”上下文中的另一类型派生(是其子代)

C ++具有is_base_of 。但是,这也包括“祖父母”类型。有没有办法获得is_child_of 功能?目的是将类型用作...

回答 1 投票 4

使用构造函数中的可变参数初始化std :: tuple

我有一个创建std :: function的类。为了简单起见,在此示例中,我将说std :: function返回一个布尔值。 std :: function需要接受一个可变参数元组。目前,我有...

回答 1 投票 0

如何检查类型是智能指针还是智能指针的引用

我正在尝试实现一种结构,该结构在编译时检查给定类型是智能指针还是智能指针的引用。我重写了此解决方案(不适用于参考):...

回答 1 投票 1

C ++许多SFINAE样式的重载

是否可以一次执行许多重载/规范,如下面的代码所示。我希望很清楚,我正在尝试实现什么,但是编译器并不这么认为。 #include

回答 2 投票 2

C ++表达式SFINAE和ostream操纵器

我正在尝试学习如何使用SFINAE。出于练习目的,我试图制作一个std :: ostream包装器,以制作一个自定义格式化程序。这是我的SFINAE和自定义输出类。 //测试器...

回答 1 投票 1

noexcept + declval无法在MSVC下编译

我试图在这里实现对我的SO问题的回答:我的目标是检测模板类T中是否存在void cancel()noexcept方法。这是我的最小示例:#include

回答 2 投票 0

SFINAE禁用构造函数,如果存在从double到T的转换

以下是我可以提出的最小的有意义的程序,以重现此问题的困境。由于...

回答 2 投票 0

SFINAE不能防止歧义的运算符重载吗?

我以为下面的代码可以编译,因为有冲突的重载已经消失了。但是编译器(GCC)说:void Foo :: bar(Xd)const'不能重载。有没有简单的方法...

回答 1 投票 1

如何使用SFINAE检测noexcept方法

我在问一个(受欢迎的)问题的变体-检测类方法的存在。我已经在SO中阅读了许多答案,大多数(C ++ 17之后的)解决方案看起来都像这样:#...

回答 1 投票 1

SFINAE检查模板参数运算符

您能告诉我为什么以下代码无法编译(在MSVC中“找不到匹配的重载函数”):template struct LinearModel {//具有基本矢量template

回答 1 投票 0

MSFIN2017带有数字限制的SFINAE :: max()

以下代码:模板 类型名称std :: enable_if :: max()== std :: numeric_limits :: max(),bool> :: type same_max(){。 ..

回答 1 投票 2

如何在现代C ++中没有宏的情况下实现系统特定的功能

JetBrains ReSharper for C ++告诉我用#ifdef _WIN32#define cls system(“ cls”)#else //假设是Unix#define cls system(“ tput clear”)#endif // _WIN32替换为...

回答 1 投票 0

调用类模板中隐式删除的副本构造函数

我已经编写了一个类模板,只希望有条件地使用复制构造函数。为此,我想应用一些SFINAE技巧,并且需要将复制构造函数模板化。 ...

回答 1 投票 0

在C ++中使用SFINAE的方法

我在项目中大量使用SFINAE函数,不确定以下两种方法(样式除外)之间是否有任何区别:#include #include ]]]

回答 2 投票 22

© www.soinside.com 2019 - 2024. All rights reserved.