Когда Boost.TR1 настроен на, чтобы использовать нативную реализацию TR1 вашей стандартной библиотеки, то это не очень много: он просто включает соответствующий заголовок.
Когда поднимется. TR1 использует реализацию Boost конкретного компонента, затем он включает соответствующий заголовок (заголовки) Boost и импортирует необходимые декларации в<namespacestd::tr1
>с использованием деклараций. Обратите внимание, что импортируются только те декларации, которые являются частью стандарта: реализация намеренно довольно строгая в отношении не включения каких-либо расширений Boost в<namespace
std::tr1
>, чтобы уловить любые ошибки переносимости в коде пользователя. Если вам действительно нужно использовать расширения Boost, вы должны включить заголовки Boost напрямую и использовать объявления в<namespaceboost::
>. Обратите внимание, что этот стиль реализации не полностью соответствует стандартам, в частности, невозможно добавить пользовательские шаблонные специализации компонентов TR1 в<namespacestd::tr1
>. Есть также одна или две библиотеки Boost, которые еще не полностью соответствуют стандартам, любые такие несоответствия документируются вTR1 по предметному разделу. Однако случаи нестандартного поведения на практике должны быть крайне редкими.
Если вы используете стандартный соответствующий заголовок (в<boost/tr1/tr1
>), то эти имена заголовков иногда могут противоречить существующим стандартным заголовкам библиотеки (например,<shared_ptr
>добавляется к существующему стандартному заголовку библиотеки<<memory>
>, а не к собственному заголовку). Эти заголовки пересылаются в существующий стандартный заголовок библиотеки одним из двух способов: для gcc он использует<#include_next
>, а для других компиляторов он использует макрос<BOOST_TR1_STD_HEADER(header)
>(определяется вboost/tr1/detail/config.hpp), который оценивает до<#include<../include/header>
>. Это должно работать «прямо из коробки» для большинства компиляторов, но означает, что эти заголовки никогда не должныразмещаться в каталоге, называемом «включить», который уже находится в пути поиска компилятора.