Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, jazzer, Вы писали:
К>>>Не, секундочку. В каких случаях шаблон ищет объявления зависимостей в точке определения, а в каких случаях — в точке первого воплощения? Что-то я дезориентирован. J>>Зависимые имена всегда ищутся в точке воплощения. J>>
J>>Such (dependent — jazzer) names are unbound and are looked up at the point of the template instantiation (14.6.4.1) in both the
J>>context of the template definition and the context of the point of instantiation.
EP>Насколько я понял, эта цитата относится к тому когда делается lookup, а не где он ищет имена.
Ну да, ну так и вопрос-то был именно о "когда" (т.е. до точки использования или после, где введено еще одно определение foo). "Где" (т.е. в каком пространстве имен) о идет, не поменялось — мы ввели foo в том же самом глобальном пространстве. И как оказалось, вопрос теперь официально решается перемещением точки воплощения в конец файла.
Здравствуйте, jazzer, Вы писали:
J>Ну да, ну так и вопрос-то был именно о "когда" (т.е. до точки использования или после, где введено еще одно определение foo). "Где" (т.е. в каком пространстве имен) о идет, не поменялось — мы ввели foo в том же самом глобальном пространстве. И как оказалось, вопрос теперь официально решается перемещением точки воплощения в конец файла.
Я о том, что при осуществлении поиска в точке воплощения (пусть даже если она в конце файла) для одних типов поиск будет производится и в instantiation context (то есть во всём что находится перед этой точкой воплощения), а для других — только в том, что видно в точке определения шаблона. Хотя "когда" — для этих типов будет одинаковым — в точке воплощения. пример.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Я о том, что при осуществлении поиска в точке воплощения (пусть даже если она в конце файла) для одних типов поиск будет производится и в instantiation context (то есть во всём что находится перед этой точкой воплощения), а для других — только в том, что видно в точке определения шаблона.
А, ты про это. Я вот все думаю, не правильнее было бы считать глобальное пространство имен ассоциированным со встроенными типами? Потому что сейчас довольно неприятная асимметрия получается.
Здравствуйте, jazzer, Вы писали:
J>А, ты про это. Я вот все думаю, не правильнее было бы считать глобальное пространство имен ассоциированным со встроенными типами?
Я вот тоже об этом думаю. Или хотя бы ввести хоть какой-то namespace, с которым они ассоциированы, например что-то типа std::builtin_types — по идее старый код не сломается?
J>Потому что сейчас довольно неприятная асимметрия получается.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, jazzer, Вы писали:
J>>Так что, начиная с С++11, теперь официально точка инстанцирования может считаться расположенной в конце файла
К>Вот и накрылись медным тазом ремарковские compile-time счётчики инстанцирования...
А ты им дефект засабачь: "Freedom to count template instantiations at compile-time."
Здравствуйте, jazzer, Вы писали:
J>Тут в процессе очередной дискуссии "С++ против всех" родился пример реализации полиморфной (т.е. шаблонной) лямбды в духе Boost.Lambda в три строчки на С++11. J>Решил, что тут тоже многим будет интересно:
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, jazzer, Вы писали:
J>>Тут в процессе очередной дискуссии "С++ против всех" родился пример реализации полиморфной (т.е. шаблонной) лямбды в духе Boost.Lambda в три строчки на С++11. J>>Решил, что тут тоже многим будет интересно:
EP>В общем обсуждали мы с товарищем sehe вопрос "to blog or not to blog", и я упомянул данный топик в качестве примера. EP>Он сделал вот такой твит. Just for reference — оставляю это здесь.
Спасибо! А кто такой sehe? А то профиль не сильно говорящий...