On Sat, Sep 21, 2013 at 07:09:48PM -0400, Howard Hinnant wrote:
> 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.

Would #include <iosfwd> not satisfy this requirement as for the
reference to std::ostream?  I haven't found anything that would
prevent the forward declarations in <iosfwd> from being considered
declarations for the purpose of [using.headers]p3.

Thanks,
-- 
Peter
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to