Просмотр Boost.CallTraits .А именно, boost::call_traits<T>::param_type
.
Вам не нужно, чтобы клиент указывал, является ли тип маленьким или нет, это задача метафункции.Также нет необходимости наследовать от чего-либо.
На самом деле ваш код сейчас плохо сформирован .Поскольку param_type
не является зависимым типом, поиск выполняется без учета базового класса;и не будет найден.Вам нужно либо явно указать его с помощью базового класса, либо добавить директиву using, либо повторно ввести его по умолчанию.
Вы просто хотите получить следующее::
namespace detail
{
template <typename T, bool small_>
struct TransType
{
typedef const T& param_type;
};
template <typename T>
struct TransType<T, true>
{
typedef const T param_type;
};
}
template <typename T>
struct TransType<T>
{
typedef detail::TransType<T, sizeof(T)<=sizeof(void*)> param_type;
};
Теперь условие является автоматическим, и нет проблем с базовым классом.