Это поздний ответ на старый вопрос. Но на фронте C ++ есть новые разработки, и для полноты картины я добавляю этот ответ:
Библиотека opaque_typedef - это попытка автора предоставить большую часть значений непрозрачных определений типов через библиотеку, не дожидаясь, пока непрозрачные определения типов станут языковой функцией.
Автор этой библиотеки, Кайл Маркли, произнес короткую блестящую речь на cppcon 2015 , представляющую эту библиотеку. Слайды его речи на github , исходный код библиотеки доступен на sourceforge . Библиотека только для заголовков, написана на C ++ 11. Gcc и clang в порядке, но VS2015, похоже, имеет проблемы с ним.
Использование библиотеки не вызывает затруднений. Следующий код был взят из документации. Это создает непрозрачный typedef из int. Он имеет тот же интерфейс, что и int (его можно добавлять, сдвигать, увеличивать, сравнивать и т. Д.), Но аргументы и возвращаемые значения относятся к вновь созданному типу, а не к int:
#include "opaque/numeric_typedef.hpp"
struct myint : opaque::numeric_typedef<int, myint> {
using base = opaque::numeric_typedef<int, myint>;
using base::base;
};