Правила ограничений для аргументов, не относящихся к типу, гласят:
Аргумент шаблона для параметра шаблона, не являющегося типом и шаблоном, должен быть одним из следующих:
- для нетипового параметра-шаблона целочисленного или перечислимого типа преобразованное постоянное выражение (5.19) типа параметра-шаблона; или
- имя нетипового параметра-шаблона; или
- постоянное выражение (5.19), которое обозначает адрес объекта со статической продолжительностью хранения и внешней или внутренней связью или функцию с внешней или внутренней связью, включая шаблоны функций и идентификаторы шаблонов функций, но исключая нестатические члены класса, выраженные ( игнорируя круглые скобки) как & id-expression, за исключением того, что & может быть опущено, если имя относится к функции или массиву, и должно быть опущено, если соответствующий параметр шаблона является ссылкой; или
- постоянное выражение, которое возвращает значение нулевого указателя (4.10); или
- константное выражение, которое оценивается как значение указателя на нулевой член (4.11); или
- указатель на член, выраженный, как описано в 5.3.1.
2 [Примечание: строковый литерал (2.14.5) не удовлетворяет требованиям ни одной из этих категорий и, следовательно, не является приемлемым аргументом шаблона.
[ Example:
template<class T, const char* p> class X {
/ ... /
};
X<int, "Studebaker"> x1; // error: string literal as template-argument
const char p[] = "Vivisectionist";
X<int,p> x2; // OK
—end example ] —end note ]
Итак, почему строковый литерал не может использоваться в качестве аргумента для параметра, не являющегося типом?
const char arr[5] = "1234";
arr имеет тот же тип const char [5], что и
"1234";
arr имеет внешнюю связь, и поэтому до стандарта С ++ 11 разрешалось использовать arr в качестве аргумента шаблона, не являющегося типом.
Но теперь указатели на объекты с внутренней связью (статическое хранилище) также можно использовать в качестве аргументов шаблона, не являющихся типом, а строковый литерал имеет внутреннюю привязку.
template<char... c>
. Думаю, это должно быть легко. И это бы обошло проблему увязки - person Aaron McDaid   schedule 11.07.2015