On Tuesday 11 April 2017 07:36:52 Thiago Macieira wrote:
> Em segunda-feira, 10 de abril de 2017, às 13:27:05 PDT, Matthew Woehlke 
> 
> escreveu:
> > Option 2: Teach C++ to choose automatically if such types should be
> > passed by value or by const-reference.
> 
> That's what I did to QVector.
> 
>     typedef typename std::conditional<std::is_fundamental<T>::value || 
> std::is_pointer<T>::value, T, const T &>::type parameter_type;
> 
>     value_type value(int i, parameter_type defaultValue) const
> Q_DECL_NOEXCEPT { return size_t(i) < d->size ? at(i) : defaultValue; }

Boost::call_traits::param_type and the above, however, only work in in non-
deduced contexts. Iow: you cannot use it in a hypothetical

  typename <Arithmetic A>
  auto sin(boost::call_traits<A>::param_type x);

  auto sinX = sin(1.0); // ERROR: cannot deduce 'A'

(this is another reason why still today one should write function templates as 
a pair of general template plus op()-in-template-class: you make the general 
template Q_ALWAYS_INLINE, and can specialize the class template's argument 
passing any way you like).

Thanks,
Marc

-- 
Marc Mutz <marc.m...@kdab.com> | Senior Software Engineer
KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt, C++ and OpenGL Experts
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to