O tempo de compilação “strlen ()” é efetivo?

Às vezes é necessário comparar o comprimento de uma corda com uma constante.
Por exemplo:

if ( line.length() > 2 )
{
    // Do something...
}

Mas estou tentando evitar o uso de constantes "mágicas" no código.
Normalmente eu uso esse código:

if ( line.length() > strlen("[]") )
{
    // Do something...
}

É mais legível, mas não é eficiente devido à chamada de função.
Eu escrevi funções de modelo da seguinte forma:

template<size_t N>
size_t _lenof(const char (&)[N])
{
    return N - 1;
}

template<size_t N>
size_t _lenof(const wchar_t (&)[N])
{
    return N - 1;
}

// Using:
if ( line.length() > _lenof("[]") )
{
    // Do something...
}

Em um build de lançamento (VisualStudio 2008), ele produz um código muito bom:

cmp    dword ptr [esp+27Ch],2 
jbe    011D7FA5 

E o bom é que o compilador não inclui a string "[]" na saída binária.

É uma otimização específica do compilador ou é um comportamento comum?

questionAnswers(4)

yourAnswerToTheQuestion