$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: brianjparker (brianjparker_at_[hidden])
Date: 2002-02-21 16:48:25
--- In boost_at_y..., "Peter Dimov" <pdimov_at_m...> wrote:
> From: "Fernando Cacciola" <fcacciola_at_g...>
> > I don't think that the very small increased complexity of
requiring auto
> > declarations to have a type name are not worth the increased
safety.
> > Don't you think it does improves safety a lot?
>
> No, actually, I don't. Partly because the right time to use auto
> declarations is exactly when the actual type doesn't matter, and
partly
> because I don't see how requiring a dummy identifier would improve
safety
> somehow.
Having the deduced type available is essential for functionality
reasons as well as type safety improvements.
e.g.
template<typename T1, typename T2>
void func(T1 t1, T2 t2)
{
auto L temp = t1 + t2;
// ...
vector<L> v;
// creating this vector cannot be done by typeless auto
}
(in my preferred syntax, this would be-
template<typename T1, typename T2, typename L>
void func(T1 t1, T2 t2)
{
L temp = t1 + t2;
// ...
vector<L> v;
}
)
A real-world example that I have posted earlier (using the template
syntax above) is-
template<typename R, typename T1, typename T2, typename L>
complex<R> operator*(const complex<T1>& lhs, imaginary<T2> rhs)
{
L l1 = -(lhs.im * rhs); // L is deduced here
L l2 = lhs.re * rhs;
complex<L> ret;
ret.re = l1;
ret.im = l2;
return ret;
}
How would this be implemented using typeless auto alone (without
using a full typeof)?
As far as improved type safety is concerned, a (contrived) example
would be-
template<typename T1, typename T2, typename L>
void func2(T1 t1, T2 t2)
{
complex<L> z = func3(t1, t2);
// compile-time type check that func3 indeed returns a complex
// ...
}
Actually, this example shows the limitation of even the type-
annotated "auto" proposal, and is a manifestation of the fact that
the various "auto" proposals are attempting to duplicate the type
deduction mechanisms already existing for template function arguments.
,Brian Parker