有没有一种方法可以在std::conditional fail上给出更好的错误
Is there a way to give better errors on std::conditional fail?
假设我有一个函数:
template<typename T, typename Dummy =
typename std::enable_if<std::is_integral<T>::value,int>::type >
void foo(T var0, T var1);
只有当T
是某种积分类型时,才会创建此函数。唯一的问题是,如果我试图在非积分类型上使用它,我会得到这个巨大的错误。
有没有任何方法可以创建类似场景中发生的自定义错误字符串?
只需放弃Dummy技巧并使用static_assert
,这就像教科书中的用例:
#include <type_traits>
template <class T>
void fun(T t){
static_assert(std::is_integral<T>::value, "fun requires integral");
}
int main(){
fun(1);
fun(2.);
}
失败,并显示非常清晰的信息:
main.cpp: In instantiation of 'void fun(T) [with T = double]':
main.cpp:10:11: required from here
main.cpp:5:5: error: static assertion failed: fun requires integral
static_assert(std::is_integral<T>::value, "fun requires integral");
^~~~~~~~~~~~~
在或多或少遥远的未来,2020年左右,你也可以为此使用概念,如果你想玩的话,gcc中有一个实验性的实现。
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- Problems with std::cin.fail()
- C++中是否存在 std::conditional 的懒惰等价物?
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 了解 cin.fail() 和 cin.clear语言 - Vector 追加程序
- cin.fail() not returning true
- 使用std::conditional中的模板来确定函数参数类型
- 如何在 GCC 中启用 C/C++ "Conditional with Omitted Operand"(又名猫王操作员 "?:" )
- cin.fail 在输入数字和字母时不起作用
- std::conditional - 嵌套用法
- 我如何检查CIN.FAIL(),但仍使用Ctrl D到达文档的结尾
- OpenCV UIImageToMat linker fail in xcode
- CIN.FAIL无法按预期工作
- Qt WebEngine on fail
- 将 std::conditional 与不可转换类型(原始与指针)一起使用
- 在C++流中,eof(),fail(),bad()和good()有什么区别
- ICLRRuntimeHost::UnloadAppDomain fail
- std::cout doen不喜欢 std::endl 和 String in conditional-if
- 如何使用CIN.FAIL()杀死程序
- 有没有一种方法可以在std::conditional fail上给出更好的错误