title: Initializing a set of structures and wrong data is showing up
body: <p>So, I establish a static set of objects like this.</p>
  <pre><code>static struct rpn_name_type {
      const std::string name;
      e_search_in search_in;
      funct_op&amp; op;
      std::any obj;
      std::any val;
  
  }rpn_names[] = {
  //conditionals
      {&quot;group_and&quot;,       es_null,        group_and_or,       std::any(condition_type({true})),       std::any(and_type()) },
      {&quot;group_and_end&quot;,   es_null,        group_and_or_end,   std::any(condition_type({false})),      std::any(and_type()) },
      {&quot;group_or&quot;,        es_null,        group_and_or,       std::any(condition_type({true})),       std::any(or_type()) },
      {&quot;group_or_end&quot;,    es_null,        group_and_or_end,   std::any(condition_type({false})),      std::any(or_type()) },
  //project data
      {&quot;percent_funded_1&quot;,es_project,     percent_funded_1,   std::any(),         std::any(tup_type_char_ii{})},
      {&quot;expend_year_1&quot;,   es_project,     expend_year_1,      std::any(),         std::any(tup_type_char_ii{})},
  //databaes data
      {&quot;remain&quot;,          es_records,     remain,             std::any(),         std::any(int_pair_type{})},
      {&quot;replace&quot;,         es_records,     replace,            std::any(),         std::any(int_pair_type{})},
      {&quot;description_has&quot;, es_records,     description_has,    std::any(),         std::any(std::wstring{})},
  //the nulllllllll
      {&quot;null&quot;,            es_null,        null,               std::any(),         std::any()},
  };
  </code></pre>
  <p>I had been setting the 'val' of created objects at run time for the 'es_project' and 'es_records'. But it was getting unwieldy to deal with every kind of op. I can greatly simplify my code if I just assign values on the condition of type.</p>
  <p>But, either I'm missing something or there is a bug in the VS compiler. Because, for percent_funded_1' and 'expend_year_1' the val is 'and_type'. Those are just for IDs.</p>
  <pre><code>struct and_type {};
  struct or_type {};
  </code></pre>
  <p><a href="https://i.stack.imgur.com/mXXjA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/mXXjA.png" alt="screen shot at runtime" /></a></p>
  <pre><code>using int_pair_type = std::pair&lt;int32_t, int32_t&gt;;
  using tup_type_char_ii = std::tuple&lt;const char*, int, int&gt;;
  </code></pre>
  <p>So, those two entries are of type tuple, I would think it as fine as the others, but I get this weirdness.</p>
  <p><strong>UPDATE</strong>:
  I'm going to fix it for now with this as I add the ops to the container:</p>
  <pre><code>        if (anop.name-&gt;search_in != es_null &amp;&amp; anop.val.type() == typeid(and_type))
              anop.val = tup_type_char_ii{};
  </code></pre>
  <p><strong>UPDATE2:</strong></p>
  <p>I should have said, I'm compiling with the latest VS2019. I was compiling with C++17 to get the error. By moving to the latest c++20 the problem went away.</p>