std::experimental::detect_or_t
を<experimental/type_traits>
から使用しようとしています。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
である。私はいつもこれを取得:GCC 6 release notesに記載されているように
main.cpp:8:44: error: 'detected_or_t' in namespace 'std::experimental' does not name a template type
GCC 6で動作するようだ。http://gcc.godbolt.org – melak47
@ melak47、検証済みhttps://godbolt.org/で試してみる。 g/1tOlXq – alfC
これはGithubで[libC++](https://github.com/llvm-mirror/libcxx)と[libstdC++]の両方で追跡できますhttps://github.com/gcc-mirror/gcc/tree/master/libstdc%2B%2B-v3)。後者ではサポートされていますが、前者ではサポートされていません。 – TemplateRex