Boost logo

Boost :

From: Giovanni Piero Deretta (gpderetta_at_[hidden])
Date: 2008-03-31 10:22:43


On Mon, Mar 31, 2008 at 2:25 PM, Douglas Gregor <dgregor_at_[hidden]> wrote:
>
> On Mon, 2008-03-31 at 00:09 -0700, Eric Niebler wrote:
> > [...] The question is whether this should compile in C++0x:
> >
> > // Takes an unconstrained template:
> > template<template<typename T> class S>
> > struct foo
> > {};
> >
> > // A constrained template
> > template<Regular Value>
> > struct vector
> > {};
> >
> > foo<vector> f; // OK? Prolly not.
>
> Yes, this is well-formed C++0x. We (have to) let unconstrained template template parameters bind to constrained
> templates.

This is good news for metaprogramming

but in general it might reopen the problem of deferred typechecking of
template parameters.
Are constrained template template parameters legal?
i.e.:

  // Takes a constrained template:
  template<template<Value> class S> // is this syntax even legal?
  struct foo {};

  // A constrained template
  template<Regular Value>
  struct vector
 {};

  foo<vector> f; // OK?

[ If it is not legal, I guess you could fake it with concept achetypes
and some kind of rebind trick.]

Not useful for metaprogramming, but for more mundane things, you might
not want to lose the benefits of
concept typechecking.

-- 
gpd

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk