【发布时间】:2016-04-05 06:21:34
【问题描述】:
我正在尝试使用来自<experimental/type_traits> 的std::experimental::detect_or_t。
我需要什么编译器、选项、版本或库来编译来自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++14 和g++ -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
【问题讨论】:
-
似乎适用于 GCC 6。在 gcc.godbolt.org 上尝试一下
-
@melak47,已验证godbolt.org/g/1tOlXq
-
适用于
g++ 6.3.1 -std=c++14 (c++14 is the default anyway)和clang++ 3.8.1 -std=c++14。
标签: g++ c++14 clang++ typetraits