Welp, реализация не обязательна для предоставления заголовков.Требуется, чтобы #include <stuff>
делал правильные вещи.Таким образом, это означает, что , если реализация решает использовать заголовки для этой функциональности, необязательно, чтобы эти заголовки соответствовали C ++.И на самом деле GCC уже довольно давно поддерживает шаблоны с переменными числами в качестве расширения.
Кроме того, я не могу не заметить
#pragma GCC system header
в заголовке <tr1/random>
, который вы упоминаете. GCC будет обрабатывать файл специально , а, например, не сообщать об ошибках предупреждений в нем.Я бы подумал, что использование расширения в соответствующем режиме может быть легко превращено в ошибку, поэтому я не уверен, что происходит, но по крайней мере юридически это вариант.
Существует также специальный статус TR1, которыйне являются обязательными.Насколько я могу судить о реализации, единственный заголовок C ++ 03, который включает <type_traits>
, это <functional>
, и он правильно делает это только в режиме C ++ 0x (то есть в остальное время это допустимый C ++ 03файл с помощью предварительной обработки, в отличие от <tr1/random>
).(Я не проверял другие случаи, хотя.)