如何检测显式的强制转换操作符,应该是_constructible工作吗?

时间:2016-12-11 21:55:05

标签: c++ c++11 visual-c++ typetraits

我想检测一个类是否有显式转换运算符。 我尝试过使用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");

我的问题是:

  • 应该__constructible在这里工作吗?
  • 如何以不同的方式检测它?

1 个答案:

答案 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:

wandbox example

(!)注意:这种方法似乎无法在MSVC 19.10 tested here上正常工作。这是我使用的full snippet