Здесь происходит то, что компилятор знает, что ваш шаблон создан с помощью T = char*
, и в первую очередь пытается определить, является ли значение, которое вы предоставляете (c
), равным char*
(это не так, это const char*
) перед проверкой его постоянства.
Поэтому вам нужно либо:
const_cast
значение c
- Укажите
A<const char *> a(c);
- Удалить спецификатор
const
из объявления конструктора А
Лучшее из этого - №3. Это лишит вас того, что, как я полагаю, является «гарантией», которая вам нужна: значение, используемое для инициализации объектов класса A, является постоянным. Чтобы добиться этого снова, вам придется использовать некоторую реализацию черт типа и шаблонных ограничений , чтобы гарантировать, что шаблон не может быть создан, когда T не является const
типом.