С++ позволяет использовать класс и функцию с тем же именем в одном пространстве имен:
struct S {};
void S() {}
В этом случае чистое имя S
означает функцию S
. Чтобы использовать struct вместо этого, вам нужно явно добавить struct
перед именем.
Также возможно создать шаблон функции и использовать оба из них:
template <class T>
void S() {}
struct S {};
Но использование шаблона struct запрещено
void S() {}
template <class T>
struct S {};
и выдает ошибку следующим образом:
error: redefinition of 'S' as different kind of symbol
В чем причина этого? Почему бы не позволить использовать шаблонную структуру здесь? Есть ли ситуация, когда использование явного ключевого слова struct
до S
(например, для версии без шаблонов) не могло решить конфликт имен, если он был разрешен? Может быть, есть предложение?