Типовой оператор лица, не являющегося членом какой-либо организации, должен только быть объявлен в пространстве имен, которое не содержит класс (struct) тип, перечислимый тип или описания типа объединения
Типовой оператор лица, не являющегося членом какой-либо организации, должен только быть объявлен в пространстве имен, которое не содержит класс (struct) тип, перечислимый тип или описания типа объединения.
Это правило запрещает помещающие типовые операторы в том же пространстве имен как класс (struct) тип, перечислимый тип или описания типа объединения. Если класс, перечисление или типы объединения используются в качестве параметров шаблона, присутствие типовых операторов в том же пространстве имен может вызвать неожиданные разрешения вызова.
Считайте пространство имен NS
это комбинирует класс B
и типовая форма operator==
:
namespace NS { class B {}; template <typename T> bool operator==(T, std::int32_t); }
B
как параметр шаблона для другого типового класса, такого как этот шаблонный класс A
:template <typename T> class A { public: bool operator==(std::int64_t); } template class A<NS::B>;
NS
используется для разрешения перегрузки когда операторы класса A
называются. Например, если вы вызываете operator==
с int32_t
аргумент, типовой operator==
в пространстве имен NS
с int32_t
параметр используется вместо operator==
в исходном шаблонном классе A
с int64_t
параметр. Вы или другой разработчик или рецензент кода можете ожидать, что вызов оператора решит к operator==
в исходном шаблонном классе A
.Для каждого типового оператора средство проверки правила определяет, содержит ли содержание пространства имен также объявления типов классов, перечислимых типов или типов объединения. Если такое объявление найдено, средство проверки отмечает нарушение правила на самом операторе.
Средство проверки также отмечает типовые операторы, заданные в глобальном пространстве имен, если глобальное пространство имен также имеет класс, перечисление или объявления объединения.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: шаблоны |
Категория: консультация, автоматизированная |