добавление строкового литерала в static_assert - PullRequest
2 голосов
/ 09 апреля 2011

Есть ли способ объединить то, что будет выводиться static_assert?Я имею в виду следующее:

template<class T>
struct X
{
static_assert(std::is_signed<T>::value, "Type " + T + " must be signed.");//this doesn't work
};

1 Ответ

2 голосов
/ 09 апреля 2011

На том основании, что это не компилируется

int main()
{
   const char c[2] = "1";
   static_assert(1==1, c)
}

ни это

int main()
{
   const char* c = "1";
   static_assert(1==1, c)
}

Оба с ошибками error: expected a string literal тогда я должен был бы сделать вывод, что это невозможно.

"Строковый литерал состоит из нуля или более символов из исходного набора символов, заключенных в двойные кавычки ("). Строковый литерал представляет собой последовательность символов, которые, взятые вместе, образуют строку с нулевым символом в конце. "- C ++ Строковые литералы

Возможно, вы захотите использовать Boost::StaticAssert, поскольку это может дать вам то, что вы ищете.

...