【发布时间】:2020-02-23 12:49:05
【问题描述】:
在尝试基于if constexpr and requires-expression for ad-hoc concepts checking 实现if constexpr 和requires clause 时遇到以下问题:
template<class P>
concept TuplePair = requires(P p) {
requires std::tuple_size<P>::value == 2;
std::get<0>(p);
std::get<1>(p);
};
void print(const auto& p) {
if constexpr( TuplePair<decltype(p)> ) {
std::cout << std::get<0>(p) << ", " << std::get<1>(p) << std::endl;
}
else {
std::cout << "else" << std::endl;
}
}
int main() {
// justifiably prints 'else':
print(std::make_tuple(3, 4, 5));
// prints 'else' even though this is a valid TuplePair:
print(std::make_tuple(1, 2));
}
if constexpr requires clause 有什么问题?
【问题讨论】:
-
显然问题是你没有将这个概念命名为
Twople。 -
谢谢@Casey,很荣幸有
concepts帮我解答我的愚蠢问题。Twople应该清楚地告知编译器该事物的含义并避免其余代码:-)
标签: c++ c++20 c++-concepts if-constexpr