title: `constructor required before non-static data member` - Am I hitting c++ core issue 1360 with a `boost::variant`?
body: <p>With this code</p>
  
  <pre><code>#include &lt;boost/variant.hpp&gt;
  #include &lt;string&gt;
  
  struct Outer
  {
      struct StateA
      {
          std::size_t index = std::string::npos;
      };
  
      struct StateB {};
  
      using State = boost::variant&lt;StateA, StateB&gt;;
  
      struct Inner
      {
          State state = StateB{};
      };
  };
  
  int main() {
      Outer o;
      (void)o;
  }
  </code></pre>
  
  <p>I get the following compilation error</p>
  
  <pre><code>/usr/include/boost/variant/variant.hpp:1301:17:   required from ‘class boost::variant&lt;Outer::StateA, Outer::StateB&gt;’
  inner_class.cpp:18:30:   required from here
  /usr/include/boost/type_traits/has_nothrow_constructor.hpp:27:84: error: constructor required before non-static data member for ‘Outer::StateA::index’ has been parsed
   template &lt;class T&gt; struct has_nothrow_constructor : public integral_constant&lt;bool, BOOST_HAS_NOTHROW_CONSTRUCTOR(T)&gt;{};
  </code></pre>
  
  <p>Referring to <a href="https://stackoverflow.com/a/17436088/390557">this</a> question, it would seem that I'm hitting <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1360" rel="nofollow noreferrer">this</a> core issue, but I wanted to check my understanding.</p>
  
  <p>Specifically, am I hitting</p>
  
  <blockquote>
    <p>an order dependency that is not specified in the current text</p>
  </blockquote>
  
  <p>when my <code>typedef</code> of a <code>variant</code> is initialised in <code>Inner</code>?  Or is there something else about inner <code>struct</code>s that causes this compilation error?</p>