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