константная ссылка на строку в качестве нетипичного аргумента шаблона

Я пытаюсь использовать константную строковую ссылку в качестве нетипичного аргумента шаблона, я не могу обойти эту ошибку компиляции.

test.h:

#include <string.h>
#include <iostream>

template<const std::string& V> class TestTmplt
{

};

const std::string& TEST_REF = "TESTREF" ;
typedef  TestTmplt<TEST_REF>  TestRefData ;

test.cpp:

#include <test.h>

template class TestTmplt<TEST_REF> ;

Ошибка компиляции:

./test.h:10:34: error: could not convert template argument âTEST_REFâ to âconst string& {aka const std::basic_string<char>&}â
./test.h:10:49: error: invalid type in declaration before â;â token

Я компилирую на Centos Linux, используя следующую команду GCC

g++ -c -MMD -MF test.u -g -D_LINUX -std=c++03 -pthread -Wall -DVALGRIND -Wno-missing-field-initializers -z muldefs -I.  -o test.o test.cpp

1

Решение

Проблема в том, что TEST_REF не тип std::stringно типа const std::string &т.е. это не объект типа std::string и поэтому не может использоваться в качестве аргумента шаблона. С небольшим изменением это работает:

#include <string>

template<const std::string& V> class TestTmplt
{

};

std::string TEST_REF = "TESTREF";

template class TestTmplt<TEST_REF>;

[Живой пример]

1

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