Templates and __builtin-constant_p

pYro_65:
Oh, and no its not a bug. The compiler ( and __builtin_constant_p ) cannot guarantee 'a' is a compile time constant within its current context.

Can you explain that a little more? I know the output of __builtin_constant_p is sometimes constant, but it isn't always. I would think all the compiler needs to know to figure out if it's constant is if it has the "const" attribute or is a literal, but does it need more than that?