<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 3/9/2016 4:47 PM, Eric Fiselier wrote:<br>
    <blockquote
cite="mid:CAB=TDAVbJazRL2sviW_dJVryqu94JV11ecPwtYjw09KwqqpRwg@mail.gmail.com"
      type="cite">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">On Wed, Mar 9, 2016 at 3:20 PM,
            Craig, Ben via cfe-dev <span dir="ltr"><<a
                moz-do-not-send="true"
                href="mailto:cfe-dev@lists.llvm.org" target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a></a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"> From the C++14
                spec...<br>
                <br>
                <blockquote>17.6.5.2 Headers [res.on.headers]<br>
                  1 A C++ header may include other C++ headers. A C++
                  header shall provide the declarations and definitions<br>
                  that appear in its synopsis. A C++ header shown in its
                  synopsis as including other C++ headers shall provide<br>
                  the declarations and definitions that appear in the
                  synopses of those other headers.<br>
                </blockquote>
                <br>
                I'm not 100% sure I know what this means.  If a header
                (say... <system_error>) mentions a class (like
                std::string), is it required to provide the full
                definition for std::string, or is the forward declared
                template good enough?  </div>
            </blockquote>
            <div><br>
            </div>
            <div>According to the standard <system_header> does
              not need <string> even though the synopsis mentions
              it. A forward declaration is good enough.</div>
            <div>Although <system_header> mentions string, the
              synopsis for that header doesn't declare or define
              std::string so [res.on.headers] doesn't apply.</div>
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000">Right now, libcxx
                uses the forward declaration.  What about entities that
                have specializations scattered all over the place, like
                std::hash?  Is the unspecialized forward declaration
                good enough, or does the full bulk of all the std::hash
                specializations have to come along too?<span
                  class="HOEnZb"><font color="#888888"><br>
                    <br>
                    <br>
                  </font></span></div>
            </blockquote>
            <div><br>
            </div>
            <div>I don't think all of the specialization need to come
              along. I'm not sure what the QoI implications are though.
              Could you provide some motivation as to why you asked this
              question? <br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    My motivation is that I'm running a conformance test suite on my
    platform (Hexagon + libcxx + libcxxabi + modified Dinkumware C
    library).  For the portion covering <system_error>, I get a
    lot of failures because the test suite tries to use / instantiate
    std::string, and it believes that it should be able to get the
    template definition transitively through <system_error>.<br>
    <br>
    I like the compile time benefits of a forward string declaration, I
    just want to be sure it's conformant.  If not, I'm fine reporting
    the test as faulty.<br>
    <br>
    <blockquote
cite="mid:CAB=TDAVbJazRL2sviW_dJVryqu94JV11ecPwtYjw09KwqqpRwg@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"><span class="HOEnZb"><font
                    color="#888888">
                    <pre cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
</pre>
                  </font></span></div>
              <br>
              _______________________________________________<br>
              cfe-dev mailing list<br>
              <a moz-do-not-send="true"
                href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
              <a moz-do-not-send="true"
                href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev"
                rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
              <br>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
</pre>
  </body>
</html>