Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Friend declaration construction - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Какой паттерн подойдет, чтобы избежать длинных ветвлений? http://www.cyberforum.ru/cpp/thread1780896.html
здравствуйте, есть код схематично такой: class CTest_base { public: CTest_base() : vec() {} virtual ~CTest_base() noexcept {} //something else protected: std::vector<int> vec;...
C++ Что такое фреймворк? Доброго времени суток. Объясните пожалуйста на счет фреймворков. Несколько минут погуглив я примерно понял что это такое, но все же остались сомнения. В универе нам сказали писать программы в QT. При... http://www.cyberforum.ru/cpp/thread1780854.html
C++ Скорость или размер. Динамика
Есть ряд вопросов.. 1) Что быстрее считает процессор (соответственно с разрядностью). К примеру динамически создаётся массив. Из этого массива надо вычислить к примеру c=a+b. Если c = m и a = m, то...
C++ Существует ли какие-нибудь мета редакторы(авто дописывание кода)?
Всем доброго времени суток! Я решил оптимизировать свою работу и придумал следующую идею на основе авто кода в C++ XE3. Если в среде написать switch и следать пробел, то программа сама допишет то,...
C++ Таблица символов для компилятора http://www.cyberforum.ru/cpp/thread1778725.html
Делаю простой компилятор и что-то зависла на вопросе о том, как хорошо реализовать таблицу символов. Реализовать в виде класса, где в качестве поля используется, скажем, вектор, в который добавляются...
C++ Хэш код для нормализованного вектора Мне нужно генерировать 64-разрядный хэш для трехмерных нормализованных векторов (double). Хэши должны быть равны если сгенерированы из одного или равных (поэлементно) векторов. У кого какие мысли?... подробнее

Показать сообщение отдельно
Nosey
1348 / 399 / 107
Регистрация: 22.10.2014
Сообщений: 861
Завершенные тесты: 2
16.07.2016, 17:45
Цитата Сообщение от hoggy Посмотреть сообщение
я так понял, что это и есть то самое, про что пишет Джоссатис:
если имя функции-друга полное,
никаких не шаблонных версий не было найдено,
то компилятор должен попытаться вывести специализацию шаблона.
А слона-то я и не приметил. Да, пишет о практической работе.

Но проблема что в стандарте, насколько я могу судить, это не указано, и даже напротив, указано обратное :
Цитата Сообщение от 14.8.2.6 Deducing template arguments from a function declaration
1 In a declaration whose declarator-id refers to a specialization of a function template, template argument
deduction is performed to identify the specialization to which the declaration refers. Specifically, this is done
for explicit instantiations (14.7.2), explicit specializations (14.7.3), and certain friend declarations (14.5.4)
и так навсякий случай добавлю следующее :
Цитата Сообщение от 14.7.3 Explicit specialization
3 ... Such a
declaration may also be a definition. If the declaration is not a definition, the specialization may be defined
later

А также я наврал насчет "всех копиляторов".
В студии следующий код собрался:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
template <typename T>
void multiply(T);
 
class Pride
{
    int p;
public:
    friend void ::multiply(int);
};
 
template <>
void multiply(int)
{
    Pride pr;
    pr.p = 10; /* member p is private */
    std::cout << pr.p;
}
 
int main()
{
    multiply(10);
}
Так что всё-таки выходит что это баг gcc и шланга. Годы идут, а ничего не меняется

Добавлено через 5 минут
avgoor, Ваш приведенный код попадает под первое правило, ибо
Цитата Сообщение от avgoor Посмотреть сообщение
template<class T> friend void Foo::foo(A& a, T t); // для этого
это без сомнений qualified template-id.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru