Хотя расширения<boost::hash>, как правило, полезны, вы можете включить их, чтобы проверить, что ваш код будет работать с другими реализациями TR1. Для этого определяют макрос<BOOST_HASH_NO_EXTENSIONS>. Когда этот макрос будет определен, будут объявлены только специализации, описанные в TR1. Но, если вы позже не определите макрос и включите<<boost/functional/hash.hpp>>тогда будет определена неспециализированная форма - активация расширений.
Настоятельно рекомендуется никогда не отменять макрос - и определять его только так, чтобы он применялся к полному блоку перевода, либо определяя его в начале основного исходного файла, либо, предпочтительно, используя коммутатор компилятора или предпочтение. И вы никогда не должны определять его в файлах заголовков.
Если вы пишете библиотеку с кодом в заголовке, который требует расширения, то лучше всего сказать пользователям не определять макрос. Их код не потребуетсяМакро.
Единицы перевода, которые компилируются с макроопределением, будут связываться с единицами, которые были компилированы без него. Эта функция была разработана, чтобы избежать нарушений ODR.