Вопросы по теме 'name-lookup'

Каково полное имя дружественной функции, определенной внутри класса?
Каково полное имя дружественной функции, определенной внутри класса? Недавно я видел пример, аналогичный следующему. Какое полное имя val() ниже? #include <iostream> namespace foo { class A { int x; public:...
2284 просмотров

C ++ не может найти функцию вне пространства имен
Компиляция следующего кода завершается неудачно, потому что вторая функция не может найти первую, даже если она находится вне пространств имен. Сам не мог разобраться в проблеме и пока не нашел ответов в сети. test.cpp: #include...
564 просмотров

Почему в этом случае не требуется оператор области для пространства имен std?
Я пробовал следующее: #include <vector> #include <algorithm> int main () { std::vector<int> myVector = {1, 2, 3, 4}; all_of(myVector.begin(), myVector.end(), [](int i){return i;}); } ожидая ошибки компиляции,...
44 просмотров

Путаница с поиском имени функции
Меня смущают некоторые правила в стандарте. Приведу их здесь: [basic.lookup.argdep] : Пусть X будет набором поиска, созданным с помощью неквалифицированного поиска , а Y будет набором поиска, созданным поиском, зависящим от аргументов...
89 просмотров

Почему определения типов суперкласса находятся в области видимости только тогда, когда класс не является шаблоном?
Рассмотрим следующий код, упрощенный из некоторых итераторов, которые я писал: #include <iterator> #include <iostream> #include <typeinfo> #include <array> struct NoTemplate:public...
239 просмотров
schedule 19.02.2022

Почему я получаю ошибку времени компиляции, когда указатель базового класса указывает на виртуальную функцию производного класса, объявленную в базовом классе?
У меня есть базовый класс, который имеет virtual void function1 () и переопределяется в производном классе. Кроме того, в моем производном классе есть еще одна виртуальная функция, как показано ниже. class Base { public: virtual void...
112 просмотров

Разница в поведении clang и gcc при попытке запутать их, используя псевдоним шаблона с фиктивным параметром, чтобы скрыть базовый класс
Рассмотрим следующую программу на C ++: class A { protected: int x; }; template<typename X> using B = A; template<typename T> class C : public B<T> { public: void f() { x = 0;...
101 просмотров

При разрешении имен, зависящих от шаблона, не должно быть объявлений без привязки?
В стандарте c ++ [temp.point] написано: Контекст создания экземпляра выражения, который зависит от аргументов шаблона, - это набор объявлений с внешней связью , объявленный до точки создания экземпляра специализации шаблона в той же единице...
174 просмотров

Распространение typedef из базового класса в производный для шаблона
Я пытаюсь определить базовый класс, который содержит только 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...
30825 просмотров

Как интерпретировать правило [namespace.udir]p2 в стандарте С++?
Меня немного смущают последствия [namespace.udir]p2. Рассмотрим следующую программу: namespace X { int i = 1; } namespace Y { using namespace X; } int main() { i = 2; } В нем поиск имени для i в main не работает (я пробовал с GCC, Clang...
50 просмотров

Проблема поиска имени ADL, используется std :: swap; swap (a, b), связанный с перегрузкой функции или функцией внутренней области видимости, скрыть функцию внешней области видимости?
Я знаю, что такое ADL, и я знаю, что в C ++ функция внутренней области видимости скрывает функции внешней области. То есть имена не перегружают области действия. Таким образом, перегрузка функций должна выполняться в том же объеме. Итак, теперь...
42 просмотров

Частное наследование, возврат ссылки на статический член базового класса
У меня простой вопрос относительно наследования от класса, который частным образом наследует базовый класс, т.е. у нас есть class Base {}; class Heir: private Base {}; class HeirsHeir : public Heir {}; Я понимаю, что HeirsHeir не может...
174 просмотров
schedule 04.07.2022

Неоднозначный поиск шаблона элемента
Ответ на этот вопрос содержится в следующем коде: #include <vector> using std::vector; struct foo { template<typename U> void vector(); }; int main() { foo f; f.vector<int>(); // ambiguous! } Последняя строка в...
210 просмотров

Неквалифицированный поиск имени, объявленного в теле функции
Я столкнулся с определением объявления: Объявление является определением, если оно не объявляет функцию без указания тела функции. #include <stdio.h> void foo() { printf("foo\n"); } int main() { void foo(); foo(); }...
39 просмотров
schedule 01.09.2022

Скрытие имени параметра шаблона
Меня недавно укусил (упрощенно) struct Base { typedef char T; }; template<typename T> struct Foo : Base { T x[50]; // This is Base::T, not the template parameter }; Другими словами, имя члена класса скрывает параметр шаблона...
709 просмотров

Скрывает ли переопределение неконстантного виртуального метода константную перегрузку?
Рассмотреть возможность: #include <iostream> using namespace std; struct A { virtual void f() { cout << "A::f" << endl; } virtual void f() const { cout << "A::f const" << endl; } }; struct B : public A {};...
2652 просмотров

Где стандарт С++ 98 указывает, что локально объявленные имена шаблонов не зависят?
Согласно этой странице: http://womble.decadent.org.uk/c++/template-faq.html#non-dependent «Независимые имена — это те имена, которые считаются не зависящими от параметров шаблона, плюс имя самого шаблона и имена, объявленные в нем (члены , друзья и...
205 просмотров

использование пространств имен в библиотеках
Я хотел бы знать, необходимы ли полные имена в библиотеке. Например (здесь я делаю отступ для пространств имен для удобочитаемости): namespace A { namespace B { namespace C { class Foo { ... }; } // namespace C...
101 просмотров
schedule 21.03.2023

Проблема с поиском имени, GCC и clang расходятся во мнениях
Как указал ecatmur, на этот вопрос уже есть ответ здесь . Этот вопрос очевидно не дублирует конечный возвращаемый тип с использованием decltype с функцией шаблона с переменным числом аргументов . На самом деле он пытается предложить более...
222 просмотров

Какое правило позволяет `this-› `получать доступ к членам зависимых базовых классов?
Как мы знаем, приведенный ниже код плохо сформирован, потому что член x находится в зависимом базовом классе. Однако изменение x на this->x в указанной строке исправит ошибку. template <typename T> struct B { int x; }; template...
412 просмотров