首页 > 解决方案 > std::is_convertible 模板实现

问题描述

我遇到了一个实现std::is_convertible并且对他们为什么要测试可退货性感到困惑。下面是整个实现的摘录。为什么要将 nullptr 转换为指向返回类型 T 的函数的指针?是否有不可返回类型的示例?

template<class T>
auto test_returnable(int) -> decltype(
    void(static_cast<T(*)()>(nullptr)), std::true_type{}
);
template<class>
auto test_returnable(...) -> std::false_type;

标签: c++templates

解决方案


这会测试类型 T 是否可以通过 SFINAE 从函数返回,并根据结果返回 true_type 或 false_type。

例如,函数具有类型但不能从函数返回(尽管指针和对它们的引用可以)

https://en.cppreference.com/w/cpp/language/functions


推荐阅读