GCC在处理时似乎已损坏
~T()
哪里
T
是标量类型的引用。
following code
,这显然是一辆马车
[expr.pseudo]/2
:
template<typename T> using tester = decltype(int{}.~T(), char{});
tester<int&> ch;
int main() {}
我会用
if constexpr
template<class T>
constexpr bool my_is_destructible() {
if constexpr (std::is_reference_v<T>) {
return true;
} else if constexpr (std::is_same_v<std::remove_cv_t<T>, void>
|| std::is_function_v<T>
|| is_unknown_bound_array<T>::value ) {
return false;
} else if constexpr (std::is_object_v<T>) {
return std::experimental::is_detected_v<has_dtor, T>;
} else {
return false;
}
}
信息技术
works
还有GCC。