<span class="hljs-keyword">template</span> <<span class="hljs-keyword">class</span> <span class="hljs-title class_">T</span>> <span class="hljs-comment">// comment</span>
<span class="hljs-function"><span class="hljs-keyword">auto</span> <span class="hljs-title">foo</span><span class="hljs-params">(T x)</span> </span>{ ... };
<span class="hljs-keyword">namespace</span> impl {
<span class="hljs-keyword">template</span><<span class="hljs-keyword">typename</span> T>
<span class="hljs-keyword">struct</span> <span class="hljs-title class_">is_streamable</span><T, std::<span class="hljs-type">void_t</span><<span class="hljs-keyword">decltype</span>(std::<span class="hljs-built_in">declval</span><std::wostream &>() << std::<span class="hljs-built_in">declval</span><T>())>> : std::true_type { };
}
<span class="hljs-comment">// Disable overload for already valid operands.</span>
<span class="hljs-keyword">template</span><<span class="hljs-keyword">class</span> <span class="hljs-title class_">T</span>, <span class="hljs-keyword">class</span> = std::<span class="hljs-type">enable_if_t</span><!impl::is_streamable_v<<span class="hljs-type">const</span> T &> && std::is_convertible_v<<span class="hljs-type">const</span> T &, std::wstring_view>>>
std::wostream &<span class="hljs-keyword">operator</span> <<(std::wostream &stream, <span class="hljs-type">const</span> T &thing)
{
<span class="hljs-keyword">return</span> stream << <span class="hljs-built_in">static_cast</span><std::wstring_view>(thing);
}
<span class="hljs-keyword">enum struct</span> <span class="hljs-title class_">DataHolder</span> { };
<span class="hljs-keyword">enum class</span> <span class="hljs-title class_">DataThingy</span> { };
<span class="hljs-keyword">enum class</span> <span class="hljs-title class_">Boolean</span> : <span class="hljs-type">char</span> {
True, False, FileNotFound
};
<span class="hljs-keyword">union</span> <span class="hljs-title class_">Soy</span>
{
};