gpt4 book ai didi

c++ - 对模板中的所有其他类型执行 static_assert

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

如何对模板中的所有其他类型执行 static_assert(或其他检查)?

template<typename... Ts> //T1,T2,T3,...
struct foo {
//How can I
//for T1,T3,T5,T7,...
//do some checks, for example:
//static_assert(std::is_default_constructible<Tn>::value,"invalid type");
//static_assert(std::is_copy_constructible<Tn>::value,"invalid type");
};

最佳答案

请试试这个:

#include <type_traits>

template <typename... Ts>
struct default_constructible;

template <typename T>
struct default_constructible<T>
{
static constexpr bool value = std::is_default_constructible<T>::value;
};

template <>
struct default_constructible<>
{
static constexpr bool value = true;
};

template <typename T, typename U, typename... Ts>
struct default_constructible<T, U, Ts...>
{
static constexpr bool value = std::is_default_constructible<T>::value && default_constructible<Ts...>::value;
};

template <typename... Ts>
struct foo
{
static_assert(default_constructible<Ts...>::value, "");
};

class A { A() = delete; };

template class foo<int, bool>; // Compiles
template class foo<int, bool, A>; // Does not compile

Demo

关于c++ - 对模板中的所有其他类型执行 static_assert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17350329/

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