Mq-b/Modern-Cpp-templates-tutorial

02类模板中,模板模板形参的示例代码模板类型参数重名,`msvc` 允许 `gcc` 编译错误

Closed this issue · 9 comments

1710126854087

出处:第二章类模板中,有名字的模板模板形参

在gcc13.2.0下编译报错

Mq-b commented

你应该提供 https://godbolt.org/

Mq-b commented

模板类型参数重名了,的确,这是个问题,msvc 不在乎这个问题。

Mq-b commented

https://godbolt.org/z/zPenEK9Ko

把第二个模板类型参数的名字改成 T2 就是。

Mq-b commented
  1. 有默认模板且可以有名字的模板模板形参

也有这个问题。

Mq-b commented

还是改成 Ty 吧,模板模板形参那里的不动。

@ooolize

虽然可能和主题无关,但是模板模板形参并不需要命名,完全可以写成

template<typename T, template<typename> typename C = my_array>

并且命名了实际上并没有什么作用,编译器并不能提取模板模板形参里面的类型,甚至

template<template<typename...Typs> typename List>

然后sizeof...(Typs)都做不到。

特化也无法分辨。

然而, 函数重载却可以分辨数数量, 就提一下:https://godbolt.org/z/GfEzvj4aj

Mq-b commented

但是模板模板形参并不需要命名

是,但是你应该看视频是如何教学的,直接“复制”,默认带个名字了,无所谓。