使模板函数编译失败,并返回错误消息
Making template function compilation fail with an error message
我有一些模板函数&类在实例化时应失败编译,并给出错误消息。我以前用过下面的宏,它在VisualStudio&gcc:
#define PFC_CTF_ERROR(msg__) {struct cterror {char msg__:0;};}
然后,如果我有一个模板函数,我喜欢在实例化时编译失败,我会这样使用它:
template<typename T>
void foo()
{
PFC_CTF_ERROR(you_should_never_compile_this_function);
}
然而,现在我正在将代码移植到clang/llvm,即使函数没有实例化,它也无法编译。所以我尝试了static_assert(false, "message");
,但也失败了(现在甚至在MSVC中(。我想的一个选项是使用一个依赖于模板参数的表达式,如下所示:
#define PFC_CTF_ASSERT_MSG(e__, msg__) {struct cterror {char msg__:(e__);};}
template<typename T>
void foo()
{
PFC_CTF_ASSERT_MSG(sizeof(T)==0, you_should_never_compile_this_function);
}
它运行良好,但使用起来相当麻烦。有人知道如何更好地做到这一点并保持旧的PFC_CTF_ERROR()
语法吗?
您需要有一部分条件,这取决于模板参数。否则,编译器不需要推迟对它的评估,直到模板实例化。这就是sizeof(T)==0
工作的原因。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- glad 导致 glfwSwapBuffers 返回错误消息
- 我的模板类方法返回错误类型?
- 共享内存:MapViewOfFile 返回错误 5
- 使用 std::forward_list 返回错误的队列实现
- FFMPEG:sws_scale返回错误:切片参数 0, 2160 无效
- __int64 CString 返回错误的值 - C++ MFC
- C++ OpenGL 中,绘制形状返回错误
- Python os.system() 返回错误值
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- LibClang clang_getArgType() 返回错误的类型
- 除法函数返回错误的值
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 矩阵逆变器返回错误的反转
- openCL-创建子缓冲区返回错误代码13
- Qt SQL LIKE语句返回错误
- GetLastError()从FtpPutFile()返回错误6
- PfCreateInterface返回错误120(未实现)
- 为什么 Pa_GetStreamTime() 返回错误?
- G++ 在尝试使用 G++ 使用 openCV 进行编译后返回错误