<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">I think one of the reasons that I've seen SmallVectorImpl instead of</div>

SmallVector or SmallString for a function parameter is in order to<br>
avoid having the template parameter that specifies initial size, which<br>
you would have to do otherwise.</blockquote><div><br></div><div>Yes - which is rather strange. Taking something that's not part of the type & binding it into the type... I don't really see the benefit there. In the case where you have a SmallString as a member I suppose it would be moderately inconvenient to override the default size in every ctor you have, compared to just specifying it as the template parameter, but that seems marginally beneficial over not having to specify the size whenever you refer to the type.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> For example, see<br>
"FindFunctionBackedges" which can be declared in BasicBlockUtils.h and<br>
defined in BasicBlockUtils.cpp without having template instantiation.<br>
I don't know if this applies to your situation.</blockquote><div><br></div><div>In my particular situation I'm just defining a member SmallString/Vector/VectorImpl in a trivial type (TwineString, that inherits from StringRef & has a ctor that takes a Twine & populates the Small<thing> and itself) so the argument/template disparity between Impl & its implementations isn't too much of a big deal to me either way. Just quirky.</div>
<div><br></div><div>- David </div></div>