Я запускаю это в сторонней статически связанной библиотеке. Я думал, что, поскольку это библиотека только для заголовков (за исключением некоторых версий MSVC), она не будет отображаться. Может быть, я неправильно понимаю, что NM должен показать. Что я действительно хочу знать, так это то, будут ли они вызывать нарушения ODR, если я создаю ссылку на библиотеку, скомпилированную с другой версией Boost.
Смотрите вывод на: http://codepad.org/kJ86hiQg
Краткая выборка:
W boost::exception_detail::clone_base::~clone_base()
W boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error> >::~clone_impl()
W boost::exception_detail::cloning_base::~cloning_base()
W boost::exception_detail::counted_base::~counted_base()
W boost::exception::~exception()
Они кажутся слабыми символами.
http://en.wikipedia.org/wiki/Weak_symbol
Обновить Нарушения ODR не являются вызванный по дубликатам записей компоновщика в первую очередь. Они есть вызванный когда компилятор использует разные определения символов с тем же именем.
Итак, короткий ответ: нет nm
показывая эти слабые символы не вызвать или указать нарушения ODR. Однако тот факт, что эти символы являются слабыми, не означает, что не может быть и нарушения ODR.
На самом деле, я думаю, что вполне возможно иметь нарушения ODR без таких символов (например, когда структура структуры с тем же искаженным именем отличается из-за разных параметров выравнивания или упаковки) в разных единицах перевода.