Another similar issue is with alias templates. The following code:
```
template <typename T>
struct Cls {
using ptr = T *;
};
template <typename T>
using Cls_ptr = typename Cls<T>::ptr;
Cls_ptr<int> ai;
Cls_ptr<float> af;
```
produces
```
< 1><0x00000029> DW_TAG_typedef
DW_AT_type <0x0000003d>
DW_AT_name (indexed string: 0x00000008)Cls_ptr<int>
DW_AT_decl_file 0x00000001 /main.cpp
DW_AT_decl_line 0x00000007
```
by clang, but produces the following by gcc. (Note the difference in
DW_AT_name’s.)
```
< 1><0x00000044> DW_TAG_typedef
DW_AT_name Cls_ptr
DW_AT_decl_file 0x00000001
DW_AT_decl_line 0x00000007
DW_AT_decl_column 0x00000007
DW_AT_type <0x00000027>
```
On Nov 10, 2023 at 7:59 PM -0600, Nima Hamidi <[email protected]>, wrote:
>
> template <typename T>
> struct Cls {
> static const int v = 0;
> };
>
> template <typename T>
> int constexpr Cls_v = Cls<T>::v;
>
> int func() {
> return Cls_v<int> + Cls_v<float>;
> }