gpt4 book ai didi

c++ - 使用 constexpr 函数时推导失败?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:58 27 4
gpt4 key购买 nike

所以我正在根据 this question 做进一步的测试,我仍然不太清楚类型推导的工作原理。

如果我使用以下内容:

template<typename T, std::enable_if_t<std::is_same<T,int>::value, int> = 0>
inline auto fnx(T) -> int
{
return 0;
}

template<typename T, std::enable_if_t<std::is_same<T, float>::value, int> = 0>
inline auto fnx(T) -> int
{
return 0;
}

inline void fn()
{
fnx(1);
fnx(1.f);
}

我没有得到任何编译错误。但是当我这样做时:

template <bool TRUTH>
constexpr bool value() { return TRUTH; }

template<typename T, std::enable_if_t<value<std::is_same<T,int>::value>(), int> = 0>
inline auto fnx(T) -> int
{
return 0;
}

template<typename T, std::enable_if_t<value<std::is_same<T, float>::value>(), int> = 0>
inline auto fnx(T) -> int
{
return 0;
}

inline void fn()
{
fnx(1);
fnx(1.f);
}

类型推导失败。这里发生了什么?为什么通过 constexpr 函数使其无效?或者这是我的 C++ 编译器的问题?我正在使用 VC++2015。

错误是:

error C2672: 'detail::fnx': no matching overloaded function found
error C2783: 'int detail::fnx(T)': could not deduce template argument for '__formal'
note: see declaration of 'detail::fnx'

最佳答案

您的代码很好并且完全有效。但是,您不能使用 constexpr 函数在 visual studio 2015 中执行 SFINAE。您可以在此处阅读有关 MSVC 中表达式 SFINAE 的更多信息:Expression SFINAE improvements in VS 2017 RC

升级到 2017 将解决您的问题。

关于c++ - 使用 constexpr 函数时推导失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42811328/

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