<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
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
@ melak47, doğrulanmış https://godbolt.org/ g/1tOlXq – alfC
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