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

Как получить undefined reference вместо вывода? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пространства имен в Эклипс http://www.cyberforum.ru/cpp-beginners/thread635559.html
Добрый день. Переношу свой проект из IAR на Eclipse+Yagarto(gcc 4.6.2) Подскажите, из-за чего в hpp модулях проекта может не распознаваться тип namespase. Компилятор "говорит" "unknown type...
C++ Получение предыдущего объекта из списка (std::list) #include <Iostream> int main() { std::list<COORD*> coords; COORD* pCoord; for(uint16 i = 0; i < 10; ++i) { http://www.cyberforum.ru/cpp-beginners/thread635548.html
C++ Повторное открытие файла через классы
Добрый день. Пишу программу, которая должна уметь считывать файл, выполнять проверку, и, в случае ошибки, возвращаться в начало и предлагать откорректировать данные в файле. Написал, но при изменении...
C++ Использование функций excel в c++/c# (VisualStudio2010)
Всем привет. Нужно получить доступ к функциям excel из C#. Необходима функция "Подбор параметра". Может кто нибудь знает.... Нашел только как получить доступ к математическим функциям:...
C++ Triada http://www.cyberforum.ru/cpp-beginners/thread635456.html
метод сравнения триад (определить полный набор методов сравнения моментов времени) не могу понять самой сути задания, что от меня требуется. (необходимо сравнить отдельно часы минуты и секунды или...
C++ И где ошибка? Уже спасибо - разобрался сам. Модераторы, удалите пожалуйста эту тему. подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
10.08.2012, 15:02
Вот потому и «по-видимому». Я точно не уверен в семантике подобной записи, когда есть прототип функции (то есть компилятор знает, как её вызывать, и по идее может использовать), но нет реализации. По идее, это головная боль линкера — отыскать код функции по всем файлам.

Но откуда тогда компилятор знает, что кода нет, и выбрает вместо преобразования к C<T>::unspecified_bool_type, для которого как бы нет кода, другое преобразование, которое дольше (и без чтения 13.3.3.2 можно понять, что каст к юзер-тайпу лучше, чем каст к юзер-тайпу, а потом ещё каст к стандартному). Откуда он знает, что его нет?

Ведь действительно, если убрать шаблоны, то всё «не работает как надо». C → С::unspecified_bool_type ≡ void (*)() → bool не выбирается вместо C → С::unspecified_bool_type.

Возможно, тут как-то замешан вот этот пункт 14.5.3/4
When a function is defined in a friend function declaration in a class template, the function is instantiated when the function is used. The same restrictions on multiple declarations and definitions that apply to non-template function declarations and definitions also apply to these implicit definitions.
То есть если это не шаблонная функция, то она будет создана только при использовании. Возможно, выбор нужной перегрузки её поэтому и не видит, что она как бы не создана (потому что не используется). А нешаблонная функция создаётся вне зависимости от её использования.

Попробуем проверить. Есть такой код, он не ругается и выбирает цепочку до bool. А теперь такой. И тут ничего...

Тем более, что в 13.3.3.2 я что-то не увидел ничего про темплейты.

Единственное, что смущает, это 13.3.3/1, второй список, второй пункт. Там сказано, что нешаблонное лучше шаблонного. Но это только при условии, что обе цепочки равны по «хорошести».

Но есть ещё что-то в 13.3.3.1.2 про специальную трактовку юзер-кастов. Сейчас пытаюсь вкурить.

Добавлено через 14 минут
Что-то не разгорается.

В общем, пока что я могу сделать вывод, что неявные преобразования типов — это одно из величайших зол, которое внесли в C++. Избавились от пары лишних строчек при «очевидных» преобразованиях, зато можно запросто повеситься в пустой комнате.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru