Inspired by the idea of "C++ HTML template engine that uses compile time HTML parsing", I am trying to write a sample class to check whether the first char is 'a' in a string.
int dummy[0];
class Test
{
public:
constexpr Test(const char *p):p_(p){}
constexpr void check()const
{
if (p_[0]!='a')
dummy[1]=0;
}
const char *p_;
};
constexpr Test operator"" _test(const char *pszText, size_t)
{
Test t(pszText);
t.check();
return t;
}
int main()
{
//dummy[1] = 0;
constexpr Test t = "baa"_test;
}
It works well. If the first char is not 'a', it will give a compile error:
main.cpp:29:24: error: array subscript value ‘1’ is outside the bounds of array ‘dummy’ of type ‘int [0]’ constexpr Test t = "baa"_test;
What confused me is that if I change the code to:
int main()
{
dummy[1] = 0; //no compile error anymore
}
I am wondering when c++ will report array out of bounds error.
Aucun commentaire:
Enregistrer un commentaire