Второй экземпляр - это частичная специализация класса шаблона, это допустимый C ++ и не должен приводить к ошибке переопределения.
У меня были проблемы с такими функциями в компиляторах metrowerks и в прошлом, хотя, более конкретно, при использовании параметров шаблона шаблона со значениями по умолчанию, компилятор никогда не скомпилирует его. Мой обходной путь был довольно простым, не предоставьте значение по умолчанию ... (1)
На вашем месте я бы попытался добавить полную специализацию для вашего конкретного типа и надеюсь, что компилятор использует какой-то другой путь компиляции и поможет вам преодолеть это ....
(это просто дикая догадка, у меня нет / не используется компилятор metrowerks в наши дни)
typedef boost::function< void () > MyThreadFunction; // or whatever you need
template <>
struct thread::thread_data<boost::reference_wrapper< MyThreadFunction > >:
detail::thread_data_base
{
....
};
(1) Если честно, это было много лет назад, я не думаю, что какой-то компилятор компилировал шаблоны полностью тогда.