Я пытаюсь использовать 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++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
g++ 6.3.1 -std=c++14 (c++14 is the default anyway)
иclang++ 3.8.1 -std=c++14
. - person alfC   schedule 24.02.2017