Описание тега name-lookup

Name lookup is the procedure by which a name, when encountered in a program, is associated with the declaration that introduced it.
1 ответ

Где стандарт C++ 98 указывает, что локально объявленные имена шаблонов не зависят?

Согласно этой странице: http://womble.decadent.org.uk/c++/template-faq.html"Независимыми именами являются те имена, которые, как считается, не зависят от параметров шаблона, плюс имя самого шаблона и объявленных в нем имен (члены, друзья и локальные…
22 сен '12 в 12:52
1 ответ

Шаблонно-зависимое разрешение имен не должно находить объявления без связи?

В стандарте C++ [temp.point] написано: Контекст создания выражения, который зависит от аргументов шаблона, представляет собой набор объявлений с внешней связью, объявленных до момента создания специализации шаблона в том же модуле перевода. Затем в …
2 ответа

Почему этот вызов swap() неоднозначен?

Следующая программа #include <algorithm> #include <utility> #include <memory> namespace my_namespace { template<class T> void swap(T& a, T& b) { T tmp = std::move(a); a = std::move(b); b = std::move(tmp); } template&l…
1 ответ

Как работает компилятор в случае ошибки: ссылка на "mytype" неоднозначна

Я создал один сценарий, где я хочу помочь. Ниже приведен пример тестового приложения для того же. #include <iostream> using namespace std; class A { public: typedef int mytype; mytype GetInt() { return 1;} }; class B { public: typedef char myt…
1 ответ

Перегрузка функции-члена среди нескольких базовых классов

По сути, я хочу, чтобы несколько функций-членов с одинаковыми именами, но с разными сигнатурами, распространялись на несколько базовых классов. Пример: #include <iostream> struct A { void print(int) { std::cout << "Got an int!" << …
1 ответ

Поиск имени квалифицированного базового класса

Рассмотрим этот код: #include <iostream> namespace D { struct S { S(){std::cout << "D::S\n";} }; } struct S { S(){std::cout << "S\n";} }; struct X: D::S { X(): S() {} // (1) // X(): D::S() {} // (2) void f() { S s; } }; int main() …
16 июн '15 в 23:06
2 ответа

Неоднозначное множественное наследование шаблонных классов

У меня есть реальная ситуация, которую можно обобщить в следующем примере: template< typename ListenerType > struct Notifier { void add_listener( ListenerType& ){} }; struct TimeListener{ }; struct SpaceListener{ }; struct A : public Notif…
1 ответ

Это ошибка в GCC?

РЕДАКТИРОВАТЬ: Это не ошибка, просто я не знаю о поисках зависимых имен в шаблонных базовых классах (которые MSVC "услужливо" разрешает без ошибок). Некоторое время назад я написал реализацию функтора и простую оболочку "Event", которая ее используе…
09 май '13 в 21:08
2 ответа

Clang/ G ++ разница с функцией друга

Почему код ниже хорошо скомпилирован в g ++, но выдает ошибку на clang? #include <iostream> class Object {}; class Print { public: template <typename CharT> inline friend std::basic_ostream<CharT> & operator<<(std::basic_…
17 янв '15 в 19:42
1 ответ

Точка из n3290: поиск имени в зависимости от аргумента

Точка из n3290 Проект стандарта ISO: Раздел: 3.4.2, Точка 2 For each argument type T in the function call, there is a set of zero or more associated namespaces and aset of zero or more associated classes to be considered. The sets of namespaces and …
08 июн '11 в 13:16
3 ответа

Ошибочный частный базовый класс недоступен?

Компиляция этого кода с использованием g++ 4.2.1: struct S { }; template<typename T> struct ST { }; template<typename BaseType> class ref_count : private BaseType { }; template<typename RefCountType> class rep_base : public RefCoun…
1 ответ

Несоответствие неоднозначности поиска имени

Я пытаюсь понять, почему эта программа не дает неоднозначность поиска имени для меня: namespace X { int i = 1; } namespace Q { namespace P { int i = 2; using namespace X; } using namespace P; int l = i; } int main() {} Если мы изменим это так, мы по…
1 ответ

Поиск имени базового класса после наследования конструктора

Рассмотрим следующий код: struct base {}; struct derived : public base { using base::base; base foo() const; // how does name lookup on 'base' here work? }; Интуитивно понятно, что этот код действителен, и он компилируется (проверено с помощью gcc и…
7 ответов

Распространение 'typedef' от основанного до производного класса для 'template'

Я пытаюсь определить базовый класс, который содержит только typedef. template<typename T> class A { public: typedef std::vector<T> Vec_t; }; template<typename T> class B : public A<T> { private: Vec_t v; // fails - Vec_t is n…
29 окт '09 в 11:21
1 ответ

Я хотел бы видеть пример игнорирования имени функции в спецификаторе вложенного имени

Примечание к ноге (33) на странице 53 документа N4140: Поиск, в котором имена функций игнорируются, включает имена, появляющиеся в спецификаторе вложенного имени, подробном спецификаторе типа или базовом спецификаторе.
29 янв '15 в 16:59
1 ответ

Перегрузка функций между анонимным пространством имен и именованным пространством имен

Разве это не разрешено? Может кто-нибудь объяснить, почему? Algorithms.h namespace Algorithms { int kthLargest(std::vector<int> const& nums, int k); } Algorithms.cpp #include "Algorithms.h" namespace { int kthLargest(std::vector<int>…
31 дек '18 в 03:21
2 ответа

Почему функция в пространстве имен не видит мой оператор <<, определенный глобально?

Я определил operator&lt;&lt; функция выхода для std::pair экземпляры, для использования некоторыми модульными тестами, которые хотят напечатать значения, если они не смотрят то, что ожидали. Мой тестовый код также содержит пары, которые содержатся к…
22 фев '19 в 05:17
2 ответа

Двухфазный поиск имени: PODs против пользовательских типов

При компиляции и запуске кода #include &lt;iostream&gt; struct A { A(int){} }; void foo( int ) { std::cout &lt;&lt; "foo(int)" &lt;&lt; std::endl; } template&lt; typename T &gt; struct S { void bar() { foo( 5 ); } void foobar() { T t = 5; foo(t); } …
22 май '14 в 14:30
2 ответа

Как я могу получить имя функции из символа в clojure?

Предположим, я определяю x как функцию символа foo (defn foo [x] x) (def x foo) Может ли имя "foo" быть обнаружено, если дано только x? Есть ли способ в foo найти имя функции x - "foo" в этом случае? (foo x) Есть или есть возможность создать такую ​…
11 авг '12 в 01:05
3 ответа

Производный доступ класса-шаблона к данным-членам базового класса

Этот вопрос является продолжением вопроса, заданного в этой теме. Используя следующие определения классов: template &lt;class T&gt; class Foo { public: Foo (const foo_arg_t foo_arg) : _foo_arg(foo_arg) { /* do something for foo */ } T Foo_T; // eith…
13 июл '09 в 17:11