我想检测一个类是否有显式转换运算符。 我尝试过使用is_constructible,但是以下断言在msvc 19.00.23506中失败。
#include <string>
#include <type_traits>
struct Foo { explicit operator std::string() { return ""; } };
static_assert(std::is_constructible<std::string, Foo>::value, "Fail");
我的问题是:
答案 0 :(得分:1)
is_constructible在这里工作吗?
我认为应该as there is nothing that excludes explicit conversions。 g ++ 4.8 (及以上)和clang ++ 3.6 (及以上)都成功编译了代码。
如何以不同的方式检测它?
您可以尝试使用detection idiom,它是针对C ++ 17标准化的,但可在C ++ 11中实现。 (cppreference页面上提供了符合C ++ 11标准的实现。)
javascript:
(!)注意:这种方法似乎无法在MSVC 19.10 (tested here)上正常工作。这是我使用的full snippet。