gpt4 book ai didi

c++ - 使模板函数编译失败并显示错误消息

转载 作者:行者123 更新时间:2023-11-30 04:03:12 26 4
gpt4 key购买 nike

<分区>

我有一些模板函数和类,它们在实例化时应该会因给定的错误消息而无法编译。我之前为它使用过以下宏,它在 Visual Studio 和 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() 语法?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com