Введение

Документ, предлагающий дополнения к стандартной библиотеке C++

C++ Technical Report 1 (TR1) – это общепринятое название для ISO/IEC TR 19768, C++ Library Extensions, представляющего собой документ, предлагающий дополнения к стандартной библиотеке C++ для языкового стандарта C++03. Эти дополнения включают регулярные выражения, интеллектуальные указатели, хэш-таблицы и генераторы случайных чисел. TR1 не являлся стандартом сам по себе, а был лишь проектом документа. Однако большинство его предложений вошли в состав более позднего официального стандарта C++11. До стандартизации C++11 поставщики использовали этот документ как руководство при создании расширений. Целью отчета было "распространение существующей практики для расширенной стандартной библиотеки C++". Впервые отчет был распространен в виде проекта в 2005 году под названием Draft Technical Report on C++ Library Extensions, а затем опубликован в 2007 году в качестве стандарта ISO/IEC под номером ISO/IEC TR 19768:2007.

Обзор

Компиляторам не требовалось включать компоненты TR1 для соответствия стандарту C++, поскольку предложения TR1 не входили в сам стандарт, а представляли собой лишь набор возможных дополнений, которые еще предстояло утвердить. Однако большая часть TR1 была доступна в Boost, и ряд разработчиков компиляторов и библиотек реализовали все или некоторые из этих компонентов. TR1 не является исчерпывающим списком дополнений к библиотеке, появившихся в C++11. Например, C++11 включает библиотеку поддержки многопоточности, которой нет в TR1. Новые компоненты были определены в пространстве имен std::tr1, чтобы отличать их от стандартной библиотеки того времени.

Метапрограммирование и типные признаки

Теперь существует заголовочный файл <type traits>, содержащий множество полезных меташаблонов признаков, таких как is_pod, has_virtual_destructor, remove_extent и другие. Он упрощает метапрограммирование, предоставляя возможность запрашивать информацию о типах и преобразовывать их. Предложение основано на библиотеке Boost Type Traits.

C совместимость

C++ разработан для совместимости с языком программирования C, но не является полным надмножеством C из-за расхождения стандартов. TR1 пытается устранить некоторые из этих различий посредством дополнений к различным заголовочным файлам в библиотеке C++, таким как <complex>, <locale>, <cmath> и другие. Эти изменения помогают приблизить C++ к стандарту C99 (не все части C99 включены в TR1).