Is it legal to use an incomplete type in a template if the type is complete when the template is instantiated? As below #include <iostream> struct bar;
I want to iterate an unordered_set from the end to the begin: unordered_set<Expression*> BlocExpressions; for(auto it=BlocExpressions.end(); it != BlocEx