gpt4 book ai didi

c++ - 如果 constexpr 似乎只有在两种情况都有效时才有效

转载 作者:行者123 更新时间:2023-11-27 23:40:42 25 4
gpt4 key购买 nike

<分区>

给定以下代码:

template<typename T>
constexpr remove_reference_t<decltype(T{}.x, bool{})> has_x() {return true;}
template<typename T, class... U>
constexpr bool has_x(U...) {return false;}

class A { public: int x; };

int main()
{
vector<int> vec;
A my_a{};

std::cout << has_x<decltype(my_a)>() << endl << has_x<decltype(vec)>() << endl;

if constexpr(has_x<decltype(vec)>())
{
cout << vec.x << endl;
}
else
{
cout << size(vec) << endl;
}
}

只有当我注释掉 cout << vec.x << endl 时它才会编译.这显然不会编译,但我的理解来自 if constexpr 那是:

If the value is true, then statement-false is discarded (if present), otherwise, statement-true is discarded

因此我认为应该丢弃“statement-true”,但事实并非如此。如果我在“statement-true”中放置一个在任何情况下都有效的语句,它就会起作用。但是我得到了一个可能无效的声明:

error: class std::vector<int> has no member named x

我是不是做错了什么?

Live Example

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