Синтаксис шаблона переменной для определения глобальных констант

C ++ 14-способ определения глобальной константы x какого-то типа X является:

struct X { int i; char c; };
template< typename = void >
X const x_impl{1, 'x'};
static X const & x = x_impl<>;

Техника позволяет избежать ODR-нарушения (из-за внешней привязки шаблонов переменных).

Но для шаблонов функций есть удобная возможность опустить угловые скобки в следующих случаях:

template< typename T >
void f(T) {}

template< typename T = void >
void g() {}

// ...
f< int >(1);
f<>(1);
f(2); // also valid
g<>();
g(); // also valid

Существуют ли теоретические причины для отказа в возможности ссылаться на шаблон переменной без списка аргументов шаблона, даже если все (не типовые) параметры шаблона имеют значения по умолчанию (значения)? Будет очень удобно иметь возможность определять глобальные константы (скажем, в библиотеке только для заголовков) в такой форме:

template< int = 0 >
A const a{1, 'a'};

а затем, чтобы иметь возможность ссылаться на a без каких-либо угловых скобок.

std::cout << &a << std::endl; // odr-using

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]