Since the compiler does not know what valuedepends on the template argument. Thus, he tries to resolve it during the first pass (before creating the template instance) and does not work.
These two options are designed to use the resolution of the shooting, as you have, or use this->value. Since thisit is always a dependent name, this will cause the assessment to pass during the second pass.
. http://ideone.com/07odY
: :
Test<T> Base<T>, - Base<std::string> () Base<T> value, . , , , .