Здравствуйте, kbjm, Вы писали:
K>Вопрос:
K>Как правильно сделать проверку валидности преобразования Y* к T* во время компиляции?
вариант 1 (с перегрузкой, т.е. "плохой" конструктор просто не будет найден)
template<class T> template<class Y>
inline
typename boost::enable_if< boost::is_convertible<X,Y> >::type
shared_ptr<T>::attachStorage(shared_ptr_storage<Y> *pStorage)
{
}
вариант 2 (с ошибкой компиляции)
template<class T> template<class Y>
inline void
shared_ptr<T>::attachStorage(shared_ptr_storage<Y> *pStorage)
{
BOOST_STATIC_ASSERT((boost::is_convertible<X,Y>::value));
// или (еще и типы распечатает)
BOOST_MPL_ASSERT_MSG((boost::is_convertible<X,Y>::value), NO_CONVERSION, (types<X,Y>));
}