В следующем примере gcc выводит предупреждение. clang прекрасно это воспринимает. Кто прав?
С моей точки зрения, type был псевдонимом для int до using-declaration, и так оно и есть до сих пор. псевдоним для int в полном контексте класса. Поэтому я ожидаю, что смысл не изменится.
using type = int;
struct Test
{
using type = type; // gcc: declaration of 'using Test::type = using type = int' changes meaning of 'type'
};
void foo(Test::type);
Или это одна из ситуаций, когда «диагностика не требуется»?
В следующем примере gcc выводит предупреждение. clang прекрасно это воспринимает. Кто прав? С моей точки зрения, type был псевдонимом для int до using-declaration, и так оно и есть до сих пор. псевдоним для int в полном контексте класса. Поэтому я ожидаю, что смысл не изменится. [code]using type = int;
struct Test { using type = type; // gcc: declaration of 'using Test::type = using type = int' changes meaning of 'type' };
void foo(Test::type); [/code] Или это одна из ситуаций, когда «диагностика не требуется»?
Теперь это пространство имен может существовать, а может и не существовать в проекте. Однако, если он не существует, я получаю эту ошибку компиляции (что понятно)