2016-04-05 19 views
1

<experimental/type_traits>'dan std::experimental::detect_or_t kullanmayı deniyorum.Hangi compiler seçeneği/kütüphanesi detect_or_t type özelliğini kullanmam gerekiyor?

Aşağıdaki örneği http://en.cppreference.com/w/cpp/experimental/is_detected'dan derlemem gerekiyor mu?

#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!"); } 

Ben clang++ -std=c++14 ve g++ -std=c++14 kullanarak çalıştı. Ayrıca -std=c++1y ve -std=c++17 ile. Hep bu olsun: GCC 6 release notes belgelenen olarak

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

+5

göründüğünü düşünüyorum GCC 6 ile çalışmak için görünüyor. Bunu deneyin http://gcc.godbolt.org üzerinde – melak47

+1

@ melak47, doğrulanmış https://godbolt.org/ g/1tOlXq – alfC

+1

Bunu [libC++] (https://github.com/llvm-mirror/libcxx) ve [libstdC++] için Github'da izleyebilirsiniz (https://github.com/gcc-mirror/gcc/tree/master/libstdc%2B%2B-v3). İkincisinde destekleniyor, ama henüz eski değil. – TemplateRex

cevap

İlgili konular