title: How much stack memory does std::set(rb-tree) and std::unordered_set(hashtable) take?
body: <p>Considering when comparer, hasher and allocator are stateless, the struct of <code>rbtree</code> and <code>hashtable</code> should be:</p>
  <pre><code>template&lt;/*...*/&gt;
  struct RBTree {
      Node* header;
      size_t count;
      
      [[no_unique_address]] KeyComparer keyComparer;
      [[no_unique_address]] KeyExtracter keyOf;
      [[no_unique_address]] NodeAllocator nodeAlloc;
  };
  
  template&lt;/*...*/&gt;
  struct HashTable {
      size_t* buckets;
      Node* items;
  
      size_t capacity;
      size_t count;
      size_t usedBucketCount;
  
      [[no_unique_address]] KeyHasher keyHasher;
      [[no_unique_address]] KeyExtracter keyOf;
      [[no_unique_address]] NodeAllocator nodeAlloc;
  };
  
  
  static_assert(sizeof(RBTree&lt;/*...*/&gt;) == 16);
  static_assert(sizeof(HashTable&lt;/*...*/&gt; == 40));
  </code></pre>
  <p>But actually:</p>
  <pre><code>constexpr auto sizeOf_set = sizeof(std::set&lt;double&gt;);
  // MSVC (std:c++ latest) Debug: 24
  // MSVC (std:c++ latest) Release: 16
  // clang 10.0.0 (-std=c++20) -O0, -O3: 48
  
  constexpr auto sizeOf_unorderedSet = sizeof(std::unordered_set&lt;double&gt;);
  // MSVC (std:c++ latest) Debug: 80
  // MSVC (std:c++ latest) Release: 64
  // clang 10.0.0 (-std=c++20) -O0, -O3: 56
  </code></pre>
  <p>For <code>rbtree</code>, result of MSVC (release) meets my expectation. (But why 48 for clang???)
  For <code>hashtable</code>, I'm totally confused...</p>
  <p>I wonder if I had miss something necessary...</p>