从cppreference.com上的描述来看,我的印象是 std::disjunction 旨在让我在编译时短路,这样我就可以像这样使用它:
#include <type_traits>
#include <iostream>
template<nullptr_t null = nullptr>
constexpr bool does_not_compile() {
static_assert(null != nullptr);
return false;
}
void hello_world () {
if constexpr (std::disjunction_v<std::true_type, std::bool_constant<does_not_compile()>>) {
std::cout << "Hello World!" << std::endl;
}
}
但是,这不会编译, std::disjunction 不会短路,因为上面的 static_assert 不会触发(现场示例)。
但那它短路又有什么意义呢?这不可能是 || 的通常行为 在运行时,因为 std::disjunction 的类型必须在编译时知道,它取决于它的值。