使用detect_or_t类型特征需要什么编译器选项/库?

时间:2016-04-05 06:21:34

标签: g++ c++14 clang++ typetraits

我正在尝试使用std::experimental::detect_or_t中的<experimental/type_traits>

http://en.cppreference.com/w/cpp/experimental/is_detected编译以下示例需要哪些编译器,选项,版本或库?

#include <experimental/type_traits>
#include <cstddef>

template<class T>
using diff_t = typename T::difference_type;

template <class Ptr>
using difference_type = std::experimental::detected_or_t<std::ptrdiff_t, diff_t, Ptr>;

struct Meow { using difference_type = int; };
struct Purr {};

int main()
{
    static_assert(std::is_same<difference_type<Meow>, int>::value, "Meow's difference_type should be int!");
    static_assert(std::is_same<difference_type<Purr>, std::ptrdiff_t>::value, "Purr's difference_type should be ptrdiff_t!");
}

我尝试使用clang++ -std=c++14g++ -std=c++14。还有-std=c++1y-std=c++17。我总是这样:

main.cpp:8:44: error: 'detected_or_t' in namespace 'std::experimental' does not name a template type

1 个答案:

答案 0 :(得分:1)

这些特征首先被添加到GCC 6.1.0中的libstdc ++中,如GCC 6 release notes中所述:

  
      
  • 对Library Fundamentals TS第二版的大多数功能的实验支持。
  •   

手册中的执行状态表,at https://gcc.gnu.org/onlinedocs/gcc-6.1.0/libstdc++/manual/manual/status.html#table.cxx1z_ts_status

我对libc ++不太确定,但它们不受Clang 3.9.1版本的支持,但是当前主干支持,所以我认为它们最初出现在Clang 4.0.0中