有没有类似 std::unconvertible_to 的东西?

Is there something like std::unconvertible_to?

提问人:Luh0 提问时间:10/15/2022 更新时间:10/15/2022 访问量:92

问:

我正在尝试使用一个模板参数,该参数允许是除一种类型之外的所有类型。我不知道怎么做。 我是概念的新手,还没有完全理解它们,但这就是我实现 std::convertible_to 的方式:

template <typename T>
    concept notSomeType = requires(T v)
{
    {v} -> std::convertible_to<SomeType>;
};

有没有内置类似 std::unconvertible_to 的东西?
如果没有,还有其他方法可以做到这一点吗?

C 模板 类型转换 std c++ 概念

评论

0赞 fabian 10/15/2022
只是否定????
0赞 Luh0 10/15/2022
@fabian到底是怎么回事?我已经尝试过只做: {v} -> !std::convertible_to<SomeType>;它只是抛出了一些错误。正如我上面已经说过的,我真的对此一无所知
0赞 Captain Giraffe 10/15/2022
en.cppreference.com/w/cpp/types/negation

答:

3赞 fabian 10/15/2022 #1

您可以简单地创建一个否定以下概念的概念:std::convertible_to

template<class From, class To>
concept NotSomeType = !std::convertible_to<From, To>;

template<NotSomeType<int> T>
void f(T)
{
    std::cout << "Not convertible to int\n";
}

template<std::convertible_to<int> T>
void f(T)
{
    std::cout << "convertible to int\n";
}

int main()
{
    f(1);
    f('a');
    f("Hello world");
    f([]() {});
}