Унаследовать конструкторы от базового класса шаблона без повторения аргументов шаблона?

Как мне наследовать конструкторы от базового класса шаблона без повторения аргументов шаблона (и без использования макросов):

Например, это не работает (с помощью GCC 4.8):

template 
struct base {};

template 
struct derived : base {
    using base::base;
};

Это работает, если я повторяю аргументы шаблона базового класса:

template 
struct base {};

template 
struct derived : base {
    using base::base;
};

Проблема в том, что "U" может быть что-то очень сложное, и это раздражает и подвержено ошибкам повторяться. Например, вот один из моих оригинальных мотивирующих примеров:

#include 
#include 
#include 
#include 

using namespace boost::multi_index;

struct as_list_tag {};
struct as_set_tag  {};

template 
struct unique_list : multi_index_container <     T,
    indexed_by <         sequenced,
        ordered_unique
    >
> {
    using multi_index_container <         T,
        indexed_by <             sequenced,
            ordered_unique
        >
    >
    ::multi_index_container;
    using as_list = as_list_tag;
    using as_set  = as_set_tag ;
};

Я закончил работать над этим с помощью макроса:

#define MAKE_UNIQUE_LIST(template_params...)\
template \
struct unique_list : multi_index_container template_params\
{\
    using multi_index_container template_params ::multi_index_container;\
    using as_list = as_list_tag;\
    using as_set  = as_set_tag ;\
};

MAKE_UNIQUE_LIST(<     T,
    indexed_by <         sequenced,
        ordered_unique
    >
>)
#undef MAKE_UNIQUE_LIST

Есть ли лучший способ приблизиться к этому? Какой-то синтаксический трюк мне не хватает? знак равно

Ответы на вопрос(4)

Ваш ответ на вопрос