diff --git a/www/content.css b/www/content.css
index dca6a32..574b98e 100644
--- a/www/content.css
+++ b/www/content.css
@@ -23,5 +23,8 @@
 
 .itemTitle { color:#2d58b7 }
 
+span.error { color:red }
+span.caret { color:green; font-weight:bold }
+
 /* Tables */
 tr { vertical-align:top }
diff --git a/www/cxx_compatibility.html b/www/cxx_compatibility.html
index 02dabbe8..27defc2 100644
--- a/www/cxx_compatibility.html
+++ b/www/cxx_compatibility.html
@@ -25,6 +25,7 @@
 <li><a href="#init_static_const">Initialization of non-integral static const data members within a class definition</a></li>
 <li><a href="#dep_lookup">Unqualified lookup in templates</a></li>
 <li><a href="#dep_lookup_bases">Unqualified lookup into dependent bases of class templates</a></li>
+<li><a href="#declaration_ordering">Template uses of a function must either find the function by ADL or come after the declaration of the function</a></li>
 <li><a href="#undep_incomplete">Incomplete types in templates</a></li>
 <li><a href="#bad_templates">Templates with no valid instantiations</a></li>
 <li><a href="#default_init_const">Default initialization of const variable of a class type requires user-defined default constructor</a></li>
@@ -216,6 +217,129 @@
 dispatch!
 
 <!-- ======================================================================= -->
+<h2 id="declaration_ordering">Template uses of a function must either find the function by ADL or come after the declaration of the function</h2>
+<!-- ======================================================================= -->
+
+<p>For example, gcc-4.4 accepts the following code:</p>
+
+<pre>
+#include &lt;iostream>
+#include &lt;utility>
+#include &lt;vector>
+
+template&lt;typename T>
+void Dump(const T& value) {
+  std::cout &lt;&lt; value &lt;&lt; "\n";
+}
+
+template&lt;typename T, typename U>
+std::ostream& operator&lt;&lt;(std::ostream& out, const std::pair&lt;T, U>& i) {
+  return out &lt;&lt; '(' &lt;&lt; i.first &lt;&lt; ", " &lt;&lt; i.second &lt;&lt; ")";
+}
+
+namespace ns {
+  struct Data {};
+}
+
+std::ostream& operator&lt;&lt;(std::ostream& out, ns::Data) {
+  return out &lt;&lt; "Some data";
+}
+
+void Use() {
+  Dump(std::make_pair(3, 4.5));
+  Dump(ns::Data());
+  Dump(std::vector&lt;const char*>(1, "Hello World"));
+}
+
+template&lt;typename T>
+std::ostream& operator&lt;&lt;(std::ostream& out, const std::vector&lt;T>& vec) {
+  out &lt;&lt; '[';
+  for (size_t i = 0, size = vec.size(); i != size; ++i) {
+    if (i != 0)
+      out &lt;&lt; ", ";
+    out &lt;&lt; vec[i];
+  }
+  return out &lt;&lt; ']';
+}
+</pre>
+
+<p>while clang, following the rules in <tt>[temp.dep.candidate]</tt>
+complains:</p>
+
+<pre>
+<b>test.cc:7:13: <span class=error>error:</span> invalid operands to binary expression ('ostream' (aka 'basic_ostream&lt;char>') and 'std::pair&lt;int, double> const')</b>
+  std::cout &lt;&lt; value &lt;&lt; "\n";
+  <span class=caret>~~~~~~~~~ ^  ~~~~~</span>
+<b>test.cc:24:3: note:</b> in instantiation of function template specialization 'Dump&lt;std::pair&lt;int, double> >' requested here
+  Dump(std::make_pair(3, 4.5));
+  <span class=caret>^</span>
+<b>test.cc:7:13: <span class=error>error:</span> invalid operands to binary expression ('ostream' (aka 'basic_ostream&lt;char>') and 'ns::Data const')</b>
+  std::cout &lt;&lt; value &lt;&lt; "\n";
+  <span class=caret>~~~~~~~~~ ^  ~~~~~</span>
+<b>test.cc:25:3: note:</b> in instantiation of function template specialization 'Dump&lt;ns::Data>' requested here
+  Dump(ns::Data());
+  <span class=caret>^</span>
+<b>test.cc:7:13: <span class=error>error:</span> invalid operands to binary expression ('ostream' (aka 'basic_ostream&lt;char>') and 'std::vector&lt;char const *, std::allocator&lt;char const *> > const')</b>
+  std::cout &lt;&lt; value &lt;&lt; "\n";
+  <span class=caret>~~~~~~~~~ ^  ~~~~~</span>
+<b>test.cc:26:3: note:</b> in instantiation of function template specialization 'Dump&lt;std::vector&lt;char const *, std::allocator&lt;char const *> > >' requested here
+  Dump(std::vector&lt;const char*>(1, "Hello World"));
+  <span class=caret>^</span>
+3 errors generated.
+</pre>
+
+<p>The fix is to</p>
+<ol><li>Add a declaration before the use of the function, or
+<li>Move the definition to before the use of the function, or
+<li>Move the function into the same namespace as one of its
+arguments. (Note that it still needs to be declared before the
+template is <i>instantiated</i>.)
+</ol>
+
+<pre>
+#include &lt;iostream>
+#include &lt;utility>
+#include &lt;vector>
+
+template&lt;typename T>  // Fix 1.
+std::ostream& operator&lt;&lt;(std::ostream& out, const std::vector&lt;T>& vec);
+
+template&lt;typename T, typename U>  // Fix 2.
+std::ostream& operator&lt;&lt;(std::ostream& out, const std::pair&lt;T, U>& i) {
+  return out &lt;&lt; '(' &lt;&lt; i.first &lt;&lt; ", " &lt;&lt; i.second &lt;&lt; ")";
+}
+
+template&lt;typename T>
+void Dump(const T& value) {
+  std::cout &lt;&lt; value &lt;&lt; "\n";
+}
+
+namespace ns {
+  struct Data {};
+  std::ostream& operator&lt;&lt;(std::ostream& out, Data) {  // Fix 3.
+    return out &lt;&lt; "Some data";
+  }
+}
+
+void Use() {
+  Dump(std::make_pair(3, 4.5));
+  Dump(ns::Data());
+  Dump(std::vector&lt;const char*>(1, "Hello World"));
+}
+
+template&lt;typename T>
+std::ostream& operator&lt;&lt;(std::ostream& out, const std::vector&lt;T>& vec) {
+  out &lt;&lt; '[';
+  for (size_t i = 0, size = vec.size(); i != size; ++i) {
+    if (i != 0)
+      out &lt;&lt; ", ";
+    out &lt;&lt; vec[i];
+  }
+  return out &lt;&lt; ']';
+}
+</pre>
+
+<!-- ======================================================================= -->
 <h2 id="undep_incomplete">Incomplete types in templates</h2>
 <!-- ======================================================================= -->
 
