Comment #3 on pull request 1248 by bolshakov-a: Handle alias components separately
https://github.com/include-what-you-use/include-what-you-use/pull/1248
> Could you expand a little on why basic_fstream and basic_string show up now? I wonder if we could address that in ReportExplicitInstantiations somehow.
Prior to my changes, underlying type analysis of these typedefs didn't even start because the type was considered as fully provided. I think the behavior on my branch is more correct, because for such piece of code:
```cpp
// Tpl.h
template <typename>
struct Tpl{};
typedef Tpl<char> Alias;
// explicit-instantiation-header.h
#include "Tpl.h"
extern template struct Tpl<char>;
// main.cpp
#include "Tpl.h"
#include "explicit-instantiation-header.h"
Alias t;
```
IWYU from the master branch suggests to remove `#include "explicit-instantiation-header.h"` from `main.cpp` and to keep on my branch.
Determining whether or not a typedef provides explicit instantiation may be difficult because, specifically, `stringfwd.h` (where `std::string` typedef is defined) from libstdcxx doesn't include `basic_string.tcc` where explicit instantiation is. Some sort of `PublicHeaderIntendsToProvide` logic might help, but it seems like overengineering. Or, maybe, is it important?