Как уже указывал Чарльз, прямая поддержка концепций в составе C ++ 0x была удалена из языка относительно недавно, и они почти наверняка не будут пересмотрены до следующего раунда стандартизации. Надеемся, что к тому времени будет больше согласия относительно того, что они должны быть на самом деле.
Однако значительное количество библиотек пытаются предоставить аналогичные возможности. Boost Concept Check Library , пожалуй, самая очевидная, и я полагаю, что большинство других основано на ней, по крайней мере, в концепции (если вы простите за каламбур). Относительно того, почему ребята из g ++ решили перейти с '* cxx' на '* cpp', я даже не могу догадаться - кроме того, что им кажется, что нарушение обратной совместимости как можно чаще - это хорошо (хотя на самом деле они предназначены только для внутреннего использования, поэтому изменение имени не должно сильно нарушать , а только их собственный код).
Это также довольно похоже на основную идею того, что Андрей Александреску представил в §2.1 Modern C ++ Design . Если вам нужна какая-то идея о том, как написать собственную концептуальную проверку, вы можете прочитать об этом (а также §2.7, где он применяет аналогичные методы для тестирования на конвертируемость и наследование). Несмотря на то, что проверяемые концепции различны, они хорошо объясняют большинство основных приемов, поэтому:
- У вас есть хороший шанс прочитать и понять шаблоны проверки концепций
- Если вы когда-либо решите написать что-то свое, у вас есть отправная точка
Редактировать: Вероятно, стоит отметить, что стандартные библиотеки для большинства современных компиляторов C ++ включают, по крайней мере, какие-то шаблоны проверки концепций. Очевидно, гну делает. Как и Комо. На самом деле, единственное, о чем я могу подумать, это, похоже, больше не включает в себя такие вещи, как MS VC ++ (который использует библиотеку Dinkumware). Вместо этого они сконцентрировались в основном на некоторой (довольно дорогой) отладке во время выполнения. Это также несколько полезно, но в совершенно другом направлении, и эти два не являются взаимоисключающими вообще.