Псевдоним шаблона со значением по умолчанию

Информация

Я пытаюсь использовать псевдоним шаблона, чтобы улучшить читабельность моего кода. В идеале я хотел бы, чтобы у псевдонима был аргумент по умолчанию, так что если я опускаю шаблон, он использует значение по умолчанию (именно с шаблонными функциями и классами шаблонов).

Код будет выглядеть так

template<typename T = double>
struct mystruct {};

template<typename T = double> using myalias = mystruct<T>;

int main(void) {

    myalias MyStructWithDouble; // causes compilation error
    myalias<int> MyStructWithInt;

    return 0;
}

Компилятор (в данном случае g++ 4.7) вполне доволен включением = double в определении псевдонима, но, похоже, игнорировать это.

Я попробовал что-то вроде "специализировать" псевдоним, но компилятор не справился.

Вопрос

Почему компилятор принимает значение по умолчанию в определении, если нам не разрешено его использовать? Во-вторых, есть ли способ добиться этого?

мотивация

Этот пример очень прост, но в моем реальном коде псевдоним сэкономит много времени на печать (имеется более одного параметра шаблона)

1 ответ

Решение

Как и в случае с шаблонами классов, вам все равно нужно предоставить пустой список аргументов шаблона:

myalias<> MyStructWithDouble; // compiles
Другие вопросы по тегам