title: Why couldn't I get the size of a range in range-v3?
body: <p>I want to get the number of people whose name starts with 'T':</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;range\v3\all.hpp&gt;
  
  using namespace ranges;
  
  int main()
  {
      const auto names = std::vector&lt;std::string&gt; {"Tony", "Peter"};
  
      std::cout &lt;&lt; size(names | view::filter([](const auto&amp; s) {return s[0] == 'T';}));
  }
  </code></pre>
  
  <p>But I got huge compile error:</p>
  
  <pre><code>λ clang -std=c++14 test.cpp
  test.cpp:11:18: error: no matching function for call to object of type 'const ranges::v3::adl_size_detail::size_fn'
  std::cout &lt;&lt; size(names | view::filter([](const auto&amp; s) {return s[0] == 'T';}));
               ^~~~
  K:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\range/v3/size.hpp:90:32: note: candidate template
    ignored: substitution failure [with Rng =
    ranges::v3::remove_if_view&lt;ranges::v3::iterator_range&lt;std::_Vector_const_iterator&lt;std::_Vector_val&lt;std::_Simple_types&lt;std::basic_string&lt;char,
    std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt; &gt; &gt;,
    std::_Vector_const_iterator&lt;std::_Vector_val&lt;std::_Simple_types&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
    std::allocator&lt;char&gt; &gt; &gt; &gt; &gt; &gt;, ranges::v3::logical_negate&lt;(lambda at test.cpp:11:44)&gt; &gt;]: no matching function
    for call to 'size'
              constexpr auto operator()(Rng &amp;&amp;rng) const -&gt;
                             ^
  K:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\range/v3/utility/iterator.hpp:405:32: note: candidate
    function template not viable: requires 2 arguments, but 1 was provided
          iterator_size_t&lt;I&gt; operator()(I begin, S end) const
  </code></pre>
  
  <p>By the way, I use the clang 3.7 in the Visual Studio 2015 Update 1.
  So, what's wrong?</p>