Ошибка: инициализатор-строка для массива char слишком длинная, размер массива составляет 1, но инициализатор имеет размер x (включая характер заканчивающий нуль) (включая коэффициент нуля). /> Обратите внимание, что я компилируюсь для C ++ 14.
Код: Выделить всё
#include
struct StringLike
{
const char *str;
size_t len;
StringLike() : str(NULL), len(0) {}
template StringLike(const char (&litAry)[LEN_]) noexcept :
str(litAry), len(LEN_ - 1) {}
StringLike &operator=(const StringLike &rhs)
{str = rhs.str; len = rhs.len; return *this;}
template StringLike &operator=(const char (&strLit)[LEN_])
{str = strLit; len = LEN_ - 1; return *this;}
const char *data() const {return str;}
size_t length() const {return len;}
};
struct WTF
{
StringLike litStrs[3];
WTF()
{
litStrs[0] = {"Is "};
litStrs[1] = {"this "};
litStrs[2] = {"legal?"};
}
};
Код: Выделить всё
operator=
Я использовал Godbolt, чтобы убедиться, что все версии G ++ принимают этот код, и все версии Clang и сдают.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... legal-in-c