﻿<?xml version="1.0" encoding="utf-8" ?>
<AutoVisualizer
  xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

  <Type Name="std::__Cr::array&lt;*,*&gt;">
    <DisplayString>{{ size={$T2} }}</DisplayString>
    <Expand>
      <ArrayItems>
        <Size>$T2</Size>
        <ValuePointer>__elems_</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::atomic&lt;*&gt;">
      <Intrinsic Optional="true" Name="value" Expression="*($T1*)this"/>
      <DisplayString>{value()}</DisplayString>
      <Expand>
          <Item Name="[value]">value()</Item>
      </Expand>
  </Type>

  <!--libc++'s short string optimization:
      A basic_string is 3 size_t words long. In the "alternate string layout"
      that we use, they are: pointer to data, size, capacity.
      (In the normal layout, it's capacity, size, data instead.)
      If a string is short enough that it fits in these three size_ts instead,
      the string data is stored inline in these 3 words, with the last byte of
      the storage storing the length of the string.
      The highest bit of the "capacity" word is set for normal, "long" strings,
      and that bit needs to be masked out to know the real capacity.
      If this bit is not set, the string data is stored inline.
      (In the normal layout, if the lowest bit in the first byte is set,
      it's a "long" string, requiring a long string to always have even
      capacity. A short string here stores its length in the first byte
      and the inline data in the remaining storage.)
  -->
  <Type Name="std::__Cr::basic_string&lt;*&gt;">
    <Intrinsic Name="is_wide" Expression="sizeof($T1) > 1" />
    <Intrinsic Name="is_long" Expression="__rep_.__s.__is_long_" />
    <Intrinsic Name="short_size" Expression="__rep_.__s.__size_" />
    <Intrinsic Name="long_size" Expression="__rep_.__l.__size_" />
    <Intrinsic Name="long_data" Expression="__rep_.__l.__data_" />
    <!-- Mask off the top bit which stores __is_long_. -->
    <Intrinsic Name="long_cap" Expression="__rep_.__l.__cap_ &amp; 0x7FFFFFFFFFFFFFFF" />
    <!-- Short string capacity is buffer size minus 1 for null terminator -->
    <Intrinsic Name="short_cap" Expression="sizeof(__rep_.__s.__data_) / sizeof($T1) - 1" />

    <DisplayString Condition="!is_wide() &amp;&amp; is_long()">{long_data(),[long_size()]s}</DisplayString>
    <DisplayString Condition="!is_wide() &amp;&amp; !is_long()">{__rep_.__s.__data_,[short_size()]s}</DisplayString>
    <DisplayString Condition="is_long()">{long_data(),[long_size()]su}</DisplayString>
    <DisplayString Condition="!is_long()">{__rep_.__s.__data_,[short_size()]su}</DisplayString>

    <StringView Condition="is_long()">long_data(),[long_size()]</StringView>
    <StringView Condition="!is_long()">__rep_.__s.__data_,[short_size()]</StringView>

    <Expand>
      <Item Name="[size]" Condition="is_long()" ExcludeView="simple">long_size()</Item>
      <Item Name="[size]" Condition="!is_long()" ExcludeView="simple">(size_t)short_size()</Item>
      <Item Name="[capacity]" Condition="is_long()" ExcludeView="simple">long_cap()</Item>
      <Item Name="[capacity]" Condition="!is_long()" ExcludeView="simple">short_cap()</Item>
      <ArrayItems Condition="is_long()">
        <Size>long_size()</Size>
        <ValuePointer>long_data()</ValuePointer>
      </ArrayItems>
      <ArrayItems Condition="!is_long()">
        <Size>short_size()</Size>
        <ValuePointer>__rep_.__s.__data_</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::deque&lt;*,*&gt;">
    <Intrinsic Name="size" Expression="*(size_type*)&amp;__size_" />
    <Intrinsic Name="block_size"
        Expression="sizeof($T1) &lt; 256 ? 4096 / sizeof($T1) : 16" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <IndexListItems>
        <Size>size()</Size>
        <ValueNode>
          *(*(__map_.__begin_ + ($i + __start_) / block_size()) +
                                ($i + __start_) % block_size())
        </ValueNode>
      </IndexListItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::forward_list&lt;*&gt;">
    <Intrinsic Name="head"
        Expression="((__node_pointer)&amp;__before_begin_)-&gt;__next_" />
    <DisplayString Condition="head() == 0">empty</DisplayString>
    <DisplayString Condition="head() != 0">non-empty</DisplayString>
    <Expand>
      <LinkedListItems>
        <HeadPointer>head()</HeadPointer>
        <NextPointer>__next_</NextPointer>
        <ValueNode>__value_</ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>

  <!-- Note: Not in Cr! But will win over the one in stl.natvis -->
  <Type Name="std::initializer_list&lt;*&gt;">
    <DisplayString>{{ size={__size_} }}</DisplayString>
    <Expand>
      <ArrayItems>
        <Size>__size_</Size>
        <ValuePointer>__begin_</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::list&lt;*&gt;">
    <Intrinsic Name="size" Expression="__size_" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <LinkedListItems>
        <Size>size()</Size>
        <HeadPointer>__end_.__next_</HeadPointer>
        <NextPointer>__next_</NextPointer>
        <ValueNode>
          ((std::__Cr::list&lt;$T1,$T2&gt;::__node_pointer)this)
              -&gt;__value_
        </ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::map&lt;*&gt;">
    <Intrinsic Name="size" Expression="__tree_.__size_" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <Item Name="[size]">size()</Item>
      <TreeItems>
        <Size>size()</Size>
        <HeadPointer>
          ((__node_pointer)&amp;__tree_.__end_node_)-&gt;__left_
        </HeadPointer>
        <LeftPointer>
          ((std::__Cr::map&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
              -&gt;__left_
        </LeftPointer>
        <RightPointer>
          ((std::__Cr::map&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
              -&gt;__right_
        </RightPointer>
        <ValueNode>
          ((std::__Cr::map&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
              -&gt;__value_
        </ValueNode>
      </TreeItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::multimap&lt;*&gt;">
    <Intrinsic Name="size" Expression="__tree_.__size_" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <Item Name="[size]">size()</Item>
      <TreeItems>
        <Size>size()</Size>
        <HeadPointer>
          ((__node_pointer)&amp;__tree_.__end_node_)-&gt;__left_
        </HeadPointer>
        <LeftPointer>
          ((std::__Cr::multimap&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
              -&gt;__left_
        </LeftPointer>
        <RightPointer>
          ((std::__Cr::multimap&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
              -&gt;__right_
        </RightPointer>
        <ValueNode>
          ((std::__Cr::multimap&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
              -&gt;__value_
        </ValueNode>
      </TreeItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::multiset&lt;*&gt;">
    <Intrinsic Name="size" Expression="__tree_.__size_" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <Item Name="[size]">size()</Item>
      <TreeItems>
        <Size>size()</Size>
        <HeadPointer>
          ((__base::__node_pointer)&amp;__tree_.__end_node_)-&gt;__left_
        </HeadPointer>
        <LeftPointer>
          ((std::__Cr::multiset&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
              -&gt;__left_
        </LeftPointer>
        <RightPointer>
          ((std::__Cr::multiset&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
              -&gt;__right_
        </RightPointer>
        <ValueNode>
          ((std::__Cr::multiset&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
              -&gt;__value_
        </ValueNode>
      </TreeItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::optional&lt;*&gt;">
    <DisplayString Condition="!__engaged_">nullopt</DisplayString>
    <DisplayString>{__val_}</DisplayString>
    <Expand>
      <ExpandedItem Condition="__engaged_">__val_</ExpandedItem>
    </Expand>
  </Type>

  <!-- Inspired by https://github.com/microsoft/STL/blob/main/stl/debugger/STL.natvis -->
  <Type Name="std::__Cr::variant&lt;*&gt;">
    <Intrinsic Name="index" Expression="(int)__impl_.__index"/>
    <DisplayString Condition="index() &lt; 0">[valueless_by_exception]</DisplayString>
    <DisplayString Condition="index() ==  0" Optional="true">{{ index=0, value={__impl_.__data.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  1" Optional="true">{{ index=1, value={__impl_.__data.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  2" Optional="true">{{ index=2, value={__impl_.__data.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  3" Optional="true">{{ index=3, value={__impl_.__data.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  4" Optional="true">{{ index=4, value={__impl_.__data.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  5" Optional="true">{{ index=5, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  6" Optional="true">{{ index=6, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  7" Optional="true">{{ index=7, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  8" Optional="true">{{ index=8, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() ==  9" Optional="true">{{ index=9, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 10" Optional="true">{{ index=10, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 11" Optional="true">{{ index=11, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 12" Optional="true">{{ index=12, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 13" Optional="true">{{ index=13, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 14" Optional="true">{{ index=14, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 15" Optional="true">{{ index=15, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 16" Optional="true">{{ index=16, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 17" Optional="true">{{ index=17, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 18" Optional="true">{{ index=18, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 19" Optional="true">{{ index=19, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 20" Optional="true">{{ index=20, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 21" Optional="true">{{ index=21, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 22" Optional="true">{{ index=22, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 23" Optional="true">{{ index=23, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 24" Optional="true">{{ index=24, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 25" Optional="true">{{ index=25, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 26" Optional="true">{{ index=26, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 27" Optional="true">{{ index=27, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 28" Optional="true">{{ index=28, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 29" Optional="true">{{ index=29, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 30" Optional="true">{{ index=30, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <DisplayString Condition="index() == 31" Optional="true">{{ index=31, value={__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value} }}</DisplayString>
    <Expand>
      <Item Name="index">index()</Item>
      <Item Name="[value]" Condition="index() ==  0" Optional="true">__impl_.__data.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  1" Optional="true">__impl_.__data.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  2" Optional="true">__impl_.__data.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  3" Optional="true">__impl_.__data.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  4" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  5" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  6" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  7" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  8" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() ==  9" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 10" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 11" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 12" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 13" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 14" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 15" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 16" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 17" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 18" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 19" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 20" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 21" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 22" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 23" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 24" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 25" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 26" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 27" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 28" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 29" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 30" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
      <Item Name="[value]" Condition="index() == 31" Optional="true">__impl_.__data.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__tail.__head.__value</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::pair&lt;*,*&gt;">
    <DisplayString>{first}, {second}</DisplayString>
    <Expand>
      <Item Name="first">first</Item>
      <Item Name="second">second</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::priority_queue&lt;*&gt;">
    <DisplayString>{c}</DisplayString>
    <Expand>
      <ExpandedItem>c</ExpandedItem>
      <Item Name="[comp]">comp</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::set&lt;*&gt;">
    <Intrinsic Name="size" Expression="__tree_.__size_" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <Item Name="[size]">size()</Item>
      <TreeItems>
        <Size>size()</Size>
        <HeadPointer>
          ((__base::__node_pointer)&amp;__tree_.__end_node_)-&gt;__left_
        </HeadPointer>
        <LeftPointer>
          ((std::__Cr::set&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
              -&gt;__left_
        </LeftPointer>
        <RightPointer>
          ((std::__Cr::set&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
              -&gt;__right_
        </RightPointer>
        <ValueNode>
          ((std::__Cr::set&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
              -&gt;__value_
        </ValueNode>
      </TreeItems>
    </Expand>
  </Type>

  <Type Name="std::__Cr::stack&lt;*&gt;">
    <AlternativeType Name="std::__Cr::queue&lt;*&gt;" />
    <DisplayString>{c}</DisplayString>
    <Expand>
      <ExpandedItem>c</ExpandedItem>
    </Expand>
  </Type>

  <Type Name="std::__Cr::__tuple_leaf&lt;*,*,0&gt;">
    <DisplayString>{__value_}</DisplayString>
  </Type>

  <Type Name="std::__Cr::tuple&lt;&gt;">
    <DisplayString>()</DisplayString>
  </Type>

  <Type Name="std::__Cr::tuple&lt;*&gt;">
    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_})</DisplayString>
      <Expand>
          <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
      </Expand>
  </Type>

  <Type Name="std::__Cr::tuple&lt;*,*&gt;">
    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_})</DisplayString>
    <Expand>
      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::tuple&lt;*,*,*&gt;">
    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_})</DisplayString>
    <Expand>
      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::tuple&lt;*,*,*,*&gt;">
    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_})</DisplayString>
    <Expand>
      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::tuple&lt;*,*,*,*,*&gt;">
    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_})</DisplayString>
    <Expand>
      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
      <Item Name="[4]">(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::tuple&lt;*,*,*,*,*,*&gt;">
    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_})</DisplayString>
    <Expand>
      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
      <Item Name="[4]">(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_</Item>
      <Item Name="[5]">(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::tuple&lt;*,*,*,*,*,*,*&gt;">
    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;6,$T7,0&gt;)__base_})</DisplayString>
    <Expand>
      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
      <Item Name="[4]">(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_</Item>
      <Item Name="[5]">(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_</Item>
      <Item Name="[6]">(std::__Cr::__tuple_leaf&lt;6,$T7,0&gt;)__base_</Item>
    </Expand>
  </Type>

  <Type Name="std::__Cr::unique_ptr&lt;*&gt;">
    <Intrinsic Name="value" Expression="*($T1**)&amp;__ptr_" />
    <SmartPointer Usage="Minimal">value()</SmartPointer>
      <DisplayString Condition="value() == 0">empty</DisplayString>
      <DisplayString Condition="value() != 0">
        unique_ptr {value()}</DisplayString>
      <Expand>
        <Item Condition="value() != 0" Name="[ptr]">value()</Item>
      </Expand>
  </Type>

  <Type Name="std::__Cr::unordered_map&lt;*&gt;">
    <AlternativeType Name="std::__Cr::unordered_multimap&lt;*&gt;" />
    <AlternativeType Name="std::__Cr::unordered_multiset&lt;*&gt;" />
    <AlternativeType Name="std::__Cr::unordered_set&lt;*&gt;" />
    <Intrinsic Name="size" Expression="__table_.__size_" />
    <Intrinsic Name="bucket_count" Expression="__table_.__bucket_list_.__deleter_.__size_" />
    <Intrinsic Name="max_load_factor" Expression="__table_.__max_load_factor_" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <Item Name="[size]">size()</Item>
      <Item Name="[bucket_count]">bucket_count()</Item>
      <Item Name="[load_factor]">bucket_count() != 0 ? (float)size() / bucket_count() : 0.f</Item>
      <Item Name="[max_load_factor]">max_load_factor()</Item>
      <!-- Use CustomListItems instead of LinkedListItems because we
        need to cast to __table::__node_pointer and LinkedListItems
        evaluates <Value> in the context of the node, not of the container,
        so we'd have to say std::unordered_map<$T1,...>::__table::__node_pointer
        and then we couldn't share this <Type> between unordered_(multi)map
        and unordered_(multi)set. -->
      <CustomListItems>
        <Variable Name="node" InitialValue="__table_.__first_node_.__next_" />
        <Size>size()</Size>
        <Loop>
          <Item>((__table::__node_pointer)node)-&gt;__value_</Item>
          <Exec>node = node-&gt;__next_</Exec>
        </Loop>
      </CustomListItems>
    </Expand>
  </Type>
  <!-- This is the node __value_ of an unordered_(multi)map. Expand it through
    a separate formatter instead of in the <Item> expression above so that the
    same <Type> works for unordered_(multi)set and unordered_(multi)map. -->
  <Type Name="std::__Cr::__hash_value_type&lt;*&gt;">
    <DisplayString>{__cc_}</DisplayString>
    <Expand>
      <ExpandedItem>__cc_</ExpandedItem>
    </Expand>
  </Type>

  <Type Name="std::__Cr::vector&lt;*&gt;">
    <Intrinsic Name="size" Expression="__end_ - __begin_" />
    <DisplayString>{{ size={size()} }}</DisplayString>
    <Expand>
      <ArrayItems>
        <Size>size()</Size>
        <ValuePointer>__begin_</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>
</AutoVisualizer>
