How does the compiler handle macro substitutions?

 
How exactly does the compiler handle macro substitution (like __LINE__, __FUNCTION__) at compile time? For example
string Something()
{
   return "The function name is " + __FUNCTION__;
}
at compile time will be interpreted as
string Something()
{
   return "The function name is " +  "Something";
} 
or is this a misconception?
 
Artem Grigorov: at compile time?

Yes — right after comment removal.