<HTML>
<HEAD>
<TITLE>has_facet()</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="gslice-array.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="heapoperations.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library Reference Guide</B></DIV>
<H2>has_facet()</H2>
<P><B>Library:</B>&nbsp;&nbsp;<A HREF="2-6.html">Localization</A></P>

<PRE><HR><B><I>Function</I></B><HR></PRE>

<UL>
<LI><A HREF="#sec1">Local Index</A></LI>
<LI><A HREF="#sec2">Summary</A></LI>
<LI><A HREF="#sec3">Synopsis</A></LI>
<LI><A HREF="#sec4">Description</A></LI>
<LI><A HREF="#sec5">Example</A></LI>
<LI><A HREF="#sec6">See Also</A></LI>
<LI><A HREF="#sec7">Standards Conformance</A></LI>
</UL>
<A NAME="sec1"><H3>Local Index</H3></A>
No Entries
<A NAME="sec2"><H3>Summary</H3></A>
<P>A function template used to determine if a locale has a given facet</P>
<A NAME="sec3"><H3>Synopsis</H3></A>

<PRE>#include &lt;locale&gt;

namespace std {
  template &lt;class Facet&gt; 
  bool has_facet(const locale&amp;) throw();
}
</PRE>
<A NAME="sec4"><H3>Description</H3></A>
<P>The function <SAMP>has_facet()</SAMP> returns <SAMP>true</SAMP> if the requested facet is available in the locale. Otherwise, it returns <SAMP>false</SAMP>. You specify the facet type by explicitly including the template parameter (see the example below).</P>
<A NAME="sec5"><H3>Example</H3></A>

<UL><PRE>//
//  hasfacet.cpp
//
 
#include &lt;iostream&gt;   // for cout, endl
#include &lt;locale&gt;     // for has_facet



// dummy facet, must derive from locale::facet
// and define a static member of type locale::id
struct my_facet: public std::locale::facet
{
    static std::locale::id id;
};

std::locale::id my_facet::id;


int main ()
{
    // see if ctype&lt;char&gt; is contained in the locale 
    // imbued in cout
    std::cout &lt;&lt; std::boolalpha
      &lt;&lt; std::has_facet&lt;std::ctype&lt;char&gt; &gt;(std::cout.getloc ())
      &lt;&lt; std::endl;
 
    // see if my_facet is contained in the locale 
    // imbued in cout
    std::cout &lt;&lt; std::has_facet&lt;my_facet&gt;(std::cout.getloc ())
       &lt;&lt; std::endl;

    return 0;
}


Program Output:
</PRE></UL>
<UL><PRE>false
false
</PRE></UL>
<A NAME="sec6"><H3>See Also</H3></A>
<P><B><I><A HREF="locale.html">locale</A></I></B>, <A HREF="facets.html">Facets</A>, <SAMP><A HREF="use-facet.html">use_facet()</A></SAMP></P>
<A NAME="sec7"><H3>Standards Conformance</H3></A>
<P><I>ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 22.1</I></P>

<BR>
<HR>
<A HREF="gslice-array.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="heapoperations.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A>

<!-- Google Analytics tracking code -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
    _uacct = "UA-1775151-1";
    urchinTracker();
</script>
<!-- end of Google Analytics tracking code -->

</BODY>
</HTML>
