On Sep 21, 2013, at 6:59 PM, Peter Collingbourne <[email protected]> wrote:
> On Sat, Sep 21, 2013 at 05:23:18PM -0400, Howard Hinnant wrote:
>> Can you show a conforming example that demonstrates this problem? My
>> thinking has been that there is no way to use these functions in a
>> conforming manner wtih including <{i,o}stream>.
>
> This is what I had in mind:
>
> TU1:
> ========================================================================
> #include <iosfwd>
> #include <string>
>
> void f(std::ostream &os, const std::string &s) {
> os << s;
> }
> ========================================================================
>
> TU2:
> ========================================================================
> #include <iostream>
> #include <string>
>
> using namespace std;
>
> void f(ostream &os, const string &s);
>
> int main() {
> f(cout, "hello world");
> }
> ========================================================================
>
> I believe this is conforming, but I may be mistaken.
>
> Thanks,
> --
> Peter
I believe 17.6.2.2 [using.headers]/p3 makes TU1 non-conforming:
> A translation unit shall include a header only outside of any external
> declaration or definition, and shall include the header lexically before the
> first reference in that translation unit to any of the entities declared in
> that header. No diagnostic is required.
#include <ostream> is required in TU1.
Howard
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits