以下の記事を読み、
https://qiita.com/negi-drums/items/3c841dca517a2bc99f07
可変長コンテナ部を理解しようと動かしていました。
cpp
1#include <iostream> 2#include <type_traits> 3#include <typeinfo> 4#include <tuple> 5 6// なぜこれがないと 7// template<template<int...> class Vec, int Head, int... Tail>は 8// エラーになるのか。 9template<template<int...> class, int...> struct remove_zero; 10 11/* 12template<template<int...> class Vec, int Head, int... Tail> 13struct remove_zero<Vec, Head, Tail...> { 14 15 template<int... Args> using vec = std::conditional_t<Head == 0, Vec<Args...>, Vec<Head, Args...>>; 16 17 using type = typename remove_zero<vec, Tail...>::type; // なんのためにある? 18}; 19*/ 20 21template<template<int...> class Vec, int Head, int... Tail> 22struct remove_zero<Vec, Head, Tail...> { 23 template<int... Args> using vec = Vec<Args...>; 24}; 25 26/* 27// なんのためにある? 28template<template<int...> class Vec> 29struct remove_zero<Vec> { 30 using type = Vec<>; 31}; 32*/ 33 34template<int...> 35struct S; 36 37int main() { 38 std::cout << typeid(remove_zero<S, 1, 0, 2, 0, 3>).name() << std::endl; 39}
以上のコードのArgsには何が渡るのでしょうか。
また、template<template<int...> class, int...> struct remove_zero;をなくすとなぜエラーになるのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/17 00:17
2020/03/17 01:42
2020/03/17 02:06
2020/03/17 02:31
2020/03/17 03:10