gpt4 book ai didi

c++ - MSVC SFINAE : Substitution does not fail

转载 作者:行者123 更新时间:2023-11-30 01:07:05 27 4
gpt4 key购买 nike

我正在尝试制作一种“has_member”。使用 Clang(对于 msvc)效果很好(我得到 0、1),但使用 MSVC 时效果不佳(我得到 1、1)。

这是我的代码

template<typename T>
using void_t = void;

namespace detail {
template<typename AlwaysVoid, template<typename...> typename Operator, typename ...Args>
struct _is_valid : std::false_type {};


template<template<typename...> typename Operator, typename ...Args>
struct _is_valid<void_t<Operator<Args...>>, Operator, Args...> : std::true_type { using type = Operator<Args...>; };
}

template<template<typename ...> typename Operator, typename ...Args>
using is_valid = detail::_is_valid<void, Operator, Args...>;

template<typename T>
using _has_push_back = decltype(std::declval<T>().push_back(std::declval<typename T::value_type>()));

template<typename T>
using has_push_back = is_valid<_has_push_back, T>;

int main() {
std::cout << has_push_back<float>::value << " " << has_push_back<std::vector<float>>::value << std::endl;

getchar();
return 0;
}

恕我直言,Operator<Args...>不会在 detail::_is_valid 中失败.但我不明白如何使它对 MSVC 有效。

我正在使用 Visual Studio 2017

最佳答案

你应该尝试:

template<typename T> struct make_void {
using type = void;
};

template<typename T>
using void_t = typename make_void<T>::type;

关于is_detected的信息也可能有帮助。

关于c++ - MSVC SFINAE : Substitution does not fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45067791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com