<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 27, 2016 at 9:03 AM Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">zturner added inline comments.<br class="gmail_msg">
<br class="gmail_msg">
================<br class="gmail_msg">
Comment at: include/llvm/ADT/StringExtras.h:226<br class="gmail_msg">
@@ +225,3 @@<br class="gmail_msg">
+  return join_one_item_size(A) +<br class="gmail_msg">
+         join_items_size(B, std::forward<Args>(Items)...);<br class="gmail_msg">
+}<br class="gmail_msg">
----------------<br class="gmail_msg">
mehdi_amini wrote:<br class="gmail_msg">
> Do you need the B in this function?<br class="gmail_msg">
My understanding is that it is needed to disambiguate the two overloads.  If you have these two:<br class="gmail_msg">
<br class="gmail_msg">
```<br class="gmail_msg">
template <typename A1><br class="gmail_msg">
size_t join_items_size(const A1 &A) {<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
template<typename A1, typename... As><br class="gmail_msg">
size_t join_items_size(const A1 &A, As &&... Items) {<br class="gmail_msg">
}<br class="gmail_msg">
```<br class="gmail_msg">
<br class="gmail_msg">
Then if you call it as:<br class="gmail_msg">
<br class="gmail_msg">
```<br class="gmail_msg">
size_t x = join_items_size("Test");<br class="gmail_msg">
```<br class="gmail_msg">
<br class="gmail_msg">
it will be ambiguous, because the second overload could have a parameter pack of size 0.  Correct me if I'm wrong though, I admit I am not an expert here :)<br class="gmail_msg"></blockquote><div><br></div><div>A cursory test seems to work OK (does not have ambiguity):<br><br><div>$ cat a.cpp</div><div>template<typename T></div><div>void f(const T&);</div><div><br></div><div>template<typename T, typename... Ts></div><div>void f(const T&, const Ts&...) = delete;</div><div><br></div><div>void caller() {</div><div>  f(3);</div><div>}</div><div>$ clang++-tot -std=c++11 a.cpp -fsyntax-only</div><div>$</div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D24880" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D24880</a><br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div></div>