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 <nimaa.ham...@gmail.com>, 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>;
> }

Reply via email to