已删除的函数在使用时带有编译时消息

deleted functions with a compile time message when they are used

本文关键字:编译 消息 删除 函数      更新时间:2023-10-16

因此,我试图限制对具有bool转换操作符的类型的操作-例如:

template <typename R>
Result
operator&&(const R&) {
    STATIC_ASSERT(false, MY_MESSAGE);
    return Result();
}

STATIC_ASSERT是我的包装器宏围绕c++11 static_assert和一个宏c++98静态断言。

我想要一个有用的消息,作为一个错误的用户,试图使用它,使其私有或删除它在c++11不是一个选项。

然而,这只适用于MSVC,因为MSVC和g++/clang之间的差异——在g++/clang中,静态断言总是触发——即使没有使用"deleted"函数。

我所见过的唯一能做到这一点的方法是使用一个未定义的类型,并将其名称作为消息作为模板的返回类型——就像这样:
template<typename R>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison&
operator&&(const R&);

我第一次看到这个

在c++98中是否有其他的方法来做到这一点-当用户试图使用它时,一个带有自定义消息的删除函数?

static_assert(false, message)中,false与模板无关。

你必须根据模板设置你的条件。

作为static_assert(!std::is_same<T, T>::value, message)