gpt4 book ai didi

c++ - 使 C++ 在模板函数的特定实例化时编译失败

转载 作者:可可西里 更新时间:2023-11-01 18:03:48 25 4
gpt4 key购买 nike

我正在开发一个具有模板功能的项目:

template <class T> 
T foo<T>(T val) { return someFunc(val); }

template <>
bool foo<bool>(bool val) { return otherFunc(val); };

现在,我有一个类 Bar,我不想接受它作为输入。事实上,我希望它生成一个易于发现的编译错误。问题是如果我这样做:

template <>
Bar foo<Bar>(Bar val) { static_assert(false,"uh oh..."); }

每次编译都会失败。我找到了 https://stackoverflow.com/a/3926854/7673414 ,这表示我需要引用模板类型,否则静态断言总是会发生。问题是我这里没有模板类型。如果我这样做:

template< typename T >
struct always_false {
enum { value = false };
};

template <>
Bar foo<Bar>(Bar val) { static_assert(always_false<Bar>::value,"uh oh..."); }

然后它也总是编译失败。有没有办法确保类型为 Bar 的模板实例化总是导致编译错误?

最佳答案

因为 foo 是一个完整的特化,它总是会被编译,并且静态断言总是会被调用。

但是,有一个 easier way :

template <>
Bar foo<Bar>(Bar val) = delete;

这会说这个特定的版本被删除了,无法调用。

关于c++ - 使 C++ 在模板函数的特定实例化时编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45701567/

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