23 General utilities library [utilities]

23.15 Metaprogramming and type traits [meta]

23.15.1 Requirements [meta.rqmts]

A UnaryTypeTrait описывает свойство типа. Это должен быть шаблон класса, который принимает один аргумент типа шаблона и, необязательно, дополнительные аргументы, которые помогают определить описываемое свойство. Оно должно быть DefaultConstructible, CopyConstructibleи публично и недвусмысленно получено, прямо или косвенно, от его base characteristic, которая является конкретизацией шаблона integral_­constant, с аргументами в шаблон integral_­constant определяется требованиями для конкретного свойства описывается. Имена элементов базовой характеристики не должны быть скрыты и должны быть однозначно доступны в файле UnaryTypeTrait.

A BinaryTypeTrait описывает отношения между двумя типами. Это должен быть шаблон класса, который принимает два аргумента типа шаблона и, необязательно, дополнительные аргументы, которые помогают определить описываемое отношение. Оно должно быть DefaultConstructible, CopyConstructibleи публично и недвусмысленно получено, прямо или косвенно, от его base characteristic, который представляет собой специализация шаблона integral_­constant, с аргументами в шаблон integral_­constant определяется требованиями для конкретного отношения описывается. Имена элементов базовой характеристики не должны быть скрыты и должны быть однозначно доступны в файле BinaryTypeTrait.

TransformationTrait Изменяет свойство типа. Это должен быть шаблон класса, который принимает один аргумент типа шаблона и, необязательно, дополнительные аргументы, которые помогают определить модификацию. Он должен определять общедоступный вложенный тип с именем type, который должен быть синонимом измененного типа.