Это не просто VS2008, все компиляторы C ++ ведут себя таким образом.
Для преобразования SrcT в DstT необходимо два преобразования (SrcT-> LPCSTR-> DstT).Однако стандарт C ++ утверждает, что только одно пользовательское преобразование может быть неявно применено к одному значению.
Раздел 12.3, Преобразования
4 Не более одного пользовательского преобразования (конструктор или функция преобразования) неявно применяется к одному значению.
class X { // ...
public:
operator int();
};
class Y { // ...
public:
operator X();
};
Y a;
int b = a; // error: a.operatorX().operator int() not tried
int c = X(a); // OK: a.operatorX().operator int()
См. также этот вопрос .