Ao repetir a declaração de uma classe de modelo com argumento padrão, recebo um erro:
<source>:12:23: error: redefinition of default argument for 'class<template-parameter-1-2>'
12 | template <typename T, typename = T>
| ^~~~~~~~
<source>:9:23: note: original definition appeared here
9 | template <typename T, typename = T>
|
Repetir uma declaração de template forward sem argumentos default não dá nenhum erro. Repetir a mesma, mas sem usar o argumento default também funciona (mas IMO não faz sentido e deve dar algum erro).
Aqui está o exemplo completo :
template <typename T>
struct ok;
template <typename T>
struct ok;
template <typename T, typename = T>
struct not_ok;
template <typename T, typename = T>
struct not_ok;
template <typename T, typename = T>
struct why_is_it_ok;
template <typename T, typename>
struct why_is_it_ok;
POR QUE?