¿Cómo se puede definir const static std :: string en el archivo de encabezado?

Tengo una clase que me gustaría almacenar una estáticastd::string eso es realmente constante o eficazmente a través de un captador.

He intentado un par de enfoques directos
1.

const static std::string foo = "bar";

2.

const extern std::string foo; //defined at the bottom of the header like so 
...//remaining code in header
};  //close header class declaration
std::string MyClass::foo = "bar"
/#endif // MYCLASS_H

También he intentado

3.

protected:
    static std::string foo;
public:
    static std::string getFoo() { return foo; }

Estos enfoques fallan por estas razones respectivamente:

error: inicialización en clase de miembro de datos estáticosconst string MyClass::foo de tipo no literalclase de almacenamiento especificada parafoo - No parece que le guste combinarextern conconst ostaticmuchos errores de 'referencia indefinida a' generados por otras partes de mi código e incluso la línea de retorno de la función getter

La razón Me gustaría tener la declaración dentro del encabezado en lugar del archivo fuente. Esta es una clase que se ampliará y todas sus otras funciones son puramente virtuales, por lo que actualmente no tengo otra razón que estas variables para tener un archivo fuente.

Entonces, ¿cómo se puede hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta