in that sence couldn't you say the same thing about C in its entirety since C++ is a subset of C?
Even though alot of C syntax compiles properly in C++, some stuff isn't used in the common everyday C++ that is more common among C users. The stuff that, while functional in C++, isn't normally used (purely subjectively on my part), I tend to think of as more for 'C' backwards compatibility.
typedef struct MyStruct
What is the 'typedef' there for? In C++, normally, unless you're being backwards compatible, you just type 'struct MyStruct'.
Again, subjective on my part. My only point is that L"" isn't there just for backwards compatibility with C, it's there because you need to be able to define wide-character literals in C++ during normal C++ usage (if you need wide characters).
"string literal" becomes const char*
L"string literal" becomes a const wchar_t*
Since they are different types, you can't (and shouldn't be able to, to avoid errors) assign a const char* to a std::wstring, so if you wanted to, within your code, assign a literal to a wstring (or to a wchar_t pointer), you'd need some way to create literals of that type, and that's what the L prefix is for.
In C++11, two more string types were defined:
std::u16string, which manages strings composed of char16_t*.
You can declare raw char16_t string literals like this: u"string literal" (a const char16_t*)
std::u32string, which manages strings composed of char32_t*.
You can declare raw char32_t string literals like this: U"string literal" (a const char32_t*)
Which leads to the question: if "wstring d_LicenseFilePath;" was declared as a private member var of the class, why establish the wstring literal type again in the constructor?
You're correct that 'd_LicenseFilePath' was already initialized to an empty string by default, so that redundant initialization isn't necessary.