template<std::size_t I, typename T> struct tuple_element; template<std::size_t I, typename T1, typename T2> struct tuple_element<I, std::pair<T1, T2>> { static_assert(I < 2, "std::pair has only 2 elements!"); }; template<typename T1, typename T2> struct tuple_element<0, ...
template<std::size_t I, typename T> struct tuple_element; template<std::size_t I, typename T1, typename T2> struct tuple_element<I, std::pair<T1, T2>> { static_assert(I < 2, "std::pair has only 2 elements!"); }; template<typename T1, typename T2> struct tuple_element<0, ...
在这两种情况下,生成的类型都是对类似于元组的类型的引用。但是,std::tuple_element并不专门用于引用...
std::add_cv<typename std::tuple_element<I, T>::type>::type;}; (4) (C++11 起)(C++20 中弃用)提供对元组式类型的元素类型的编译时下标访问。1) 不定义主模板。要求显式(全)或部分特化以令类型为元组式。 2-4) 对 cv 限定类型的特化默认简单地添加对应的 cv 限定符。 std::tuple_element 与...
std::add_const<typename std::tuple_element<I, T>::type>::type type; }; (3) (C++11 起) template< std::size_t I, class T > class tuple_element< I, volatile T > { typedef typename std::add_volatile<typename std::tuple_element<I, T>::type>::type type; }; (4) (C++11 ...
tuple_element 接口专门用于他们自己的类型。用户的前提条件及其保证由C ++0x§17.6.3.2.1/ 1给出: 只有当声明取决于用户定义的类型并且特化符合原始模板的标准库要求且未明确禁止时,程序才可以将任何标准库模板的模板特化添加到命名空间std。 因此,不仅一般专业化不能与 ...
std::add_const<typename std::tuple_element<I, T>::type>::type; }; (2) (since C++11) template< std::size_t I, class T > struct tuple_element< I, volatile T > { using type = typename std::add_volatile<typename std::tuple_element<I, T>::type>::type; }; (3) (since C++...
{}; using MyTuple = std::tuple<int, long&, const char&, bool&&, std::string, volatile MyStruct>; using MyPair = std::pair<char, bool&&>; static_assert(std::is_same_v<std::tuple_element_t<0, MyPair>, char>); static_assert(std::is_same_v<std::tuple_element_t<1, MyPair...
cout << std::boolalpha; std::cout << std::is_same<T, int>::value << '\n'; const auto const_data = data; using CT = std::tuple_element<0, decltype(const_data)>::type; // const int // tuple_element 的结果取决于仿 tuple 类型的 cv 限定 std::cout << std::is_same<T, ...
template<std::size_t I, class T> struct tuple_element; #ifndef __cpp_pack_indexing // 递归情况 template<std::size_t I, class Head, class... Tail> struct tuple_element<I, std::tuple<Head, Tail...>> : std::tuple_element<I - 1, std::tuple<Tail...>> { }; // 基础情况 ...