14
考虑下面的代码:为什么void_t <>检测方式不适用于gcc-4.9?
#include <iostream>
#include <type_traits>
struct Test { Test& operator++(); };
struct NoIncrement { };
template <typename...> using void_t = void;
template <class, class=void_t<>>
struct has_pre_increment_member : std::false_type { };
template <class T>
struct has_pre_increment_member<T, void_t<decltype(++std::declval<T&>())>>
: public std::true_type { };
int main() {
std::cout << has_pre_increment_member<Test>::value << " ";
std::cout << has_pre_increment_member<NoIncrement>::value << std::endl;
}
随着克++ 5及之后的版本(以及-std = C++ 14标志,当然),该代码输出
1 0
,它应。随着G ++ 4.9版本(和-std = C++ 14标志),但是,它输出
1 1
两个要求使用相同的语言标准是,有啥这里的问题?
你使用的是4.9.0还是比它高?我已经看到4.9.0中的一些错误,如果你转到4.9.2,那么这些错误是固定的。 – NathanOliver
4.9.3确切地说 –
那么这就是我所能贡献的。如果它让你跌倒得更好,它也可以在叮当中奏效。 – NathanOliver