删除函数时使用编译时消息

时间:2016-09-13 11:48:17

标签: c++

所以我试图限制对转换操作符为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时,静态断言始终会触发 - 即使未使用“已删除”函数也是如此。

我唯一能看到的就是使用一个未定义的类型,它的名称作为模板的返回类型的消息 - 就像这样:

template<typename R>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison&
operator&&(const R&);

我第一次看到这个here

在c ++ 98中是否还有其他方法可以执行此操作 - 当用户尝试使用自定义消息时,这是一个已删除的函数?

1 个答案:

答案 0 :(得分:1)

<{1>}中的

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="form-group radior"> <fieldset> <legend aria-hidden="true">Legend1</legend> <div class="col-md-4"> <div class="mainlabel" for="test1">Legend1</div> </div> <div class="col-md-8 required"> <label for="Option 1a"> <input required="" type="radio" tabindex="-1"> <span class="newone"> <div class="moveme">Option 1a</div> </span> </label> <label for="Option 1b"> <input required="" type="radio" tabindex="-1"> <span class="newone"> <div class="moveme">Option 1b</div> </span> </label> <label for="Option 1c"> <input required="" type="radio" tabindex="-1"> <span class="newone"> <div class="moveme">Option 1c</div> </span> </label> </div> </fieldset> </div> <div class="form-group radior"> <fieldset> <legend aria-hidden="true">Legend2</legend> <div class="col-md-4"> <div class="mainlabel" for="test2">Legend2</div> </div> <div class="col-md-8 required"> <label for="Option 2a"> <input required="" type="radio" tabindex="-1"> <span class="newone"> <div class="moveme">Option 1c</div> </span> </label> <label for="Option 2b"> <input required="" type="radio" tabindex="-1"> <span class="newone"> <div class="moveme">Option 1c</div> </span> </label> </div> </fieldset> </div>不依赖于模板。

您必须根据模板制定条件。

static_assert(false, message)