template <SyncOpt>

struct SyncOptType

Defined at line 68 of file ../../zircon/system/ulib/concurrent/include/lib/concurrent/common.h

Define tag types and constexpr instances of them which allow us to parameter

based template deduction. Mostly, this is about working around some of C++'s

otherwise painful syntax. It allows us to say:

WellDefinedCopyable

<Foo

> wrapped_foo;

Foo foo;

wrapped_foo.CopyFrom(foo, SyncOpt_Fence); // This

wrapped_foo.template CopyFrom

<SyncOpt

::Fence>(foo); // Instead of this

Without this, having to put the `template` keyword after the `.` but before

the `

<

>`'s is just a sad and painful fact of C++ template lyfe.