gpt4 book ai didi

c++ - noexcept 说明符内的参数包

转载 作者:行者123 更新时间:2023-12-01 14:39:59 24 4
gpt4 key购买 nike

目前在C++这些都不可能,编译器提示它需要一个表达式。

这对我来说似乎微不足道,如果您正在构建一个具有可变数量类型的类似元组的对象,如何检查所有这些类型是否都是 nothrow default/move/copy constructible ?

这对我来说似乎是一个令人讨厌的语言缺陷。

有什么选择吗?

#include <iostream>
#include <type_traits>

template <typename... TYPES>
struct Test1 {
Test1()
noexcept(... && (std::is_nothrow_default_constructible_v<TYPES>)) {}
};

template <typename... TYPES>
struct Test2 {
Test2()
noexcept(std::conjunction_v<std::is_nothrow_default_constructible<TYPES>, ...>) {}
};

int
main() {

Test1<int, int, int> test1;
Test2<int, int, int> test2;

return 0;
}

最佳答案

两者都是可能的。您只是没有使用正确的语法。它是

noexcept((... && std::is_nothrow_default_constructible_v<TYPES>))

或者
noexcept(std::conjunction_v<std::is_nothrow_default_constructible<TYPES>...>)

括号需要绕过第一个选项中的整个折叠表达式。在第二个中,逗号是多余的。第二种形式的包扩展已经暗示了逗号分隔的列表。

关于c++ - noexcept 说明符内的参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59859174/

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