Re: "default template arguments may not be used in function templates"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/4/05, Vincent Torri <Vincent.Torri@xxxxxxxxxxxxxxx> wrote:
> 
> Hello,

Hey, Vincent.

> I have the following class:
> 
> template <typename T, typename Synchronizer = synchronizer::None, typename
> Creator = T * (*)()>
> class value_cache
> {
>   ***
> 
> public:  //interface
> 
>   boost::shared_ptr<T> Get() const
>   {
>     Synchronizer synchronizer();
> 
>     ***
>     ***
>   }
> };
> 
> But gcc reports this error message at compile time:
> 
> "default template arguments may not be used in function templates"
> 
> for the declaration of synchronizer().
> 
> I use gcc 3.3.4

You can't use the default arguments in the function declaration (see
http://tinyurl.com/bvnbx).  To get around this, declare the class
methods in the header file like normal, but define them after the
class declaration (in the same header file) kinda like this:

// -*- mode: c++ -*-
// value_cache.h
#include <boost/shared_ptr.hpp>

class synchronizer {
    class None { };
};

template <typename T, typename Synchronizer = synchronizer::None,
          typename Creator = T * (*)() >
class value_cache
{
public:
    typedef boost::shared_ptr<T> SharedPtr;

    SharedPtr Get() const;
};

#define ValueCache value_cache<class T, class Synchronizer, class Creator>

inline ValueCache::SharedPtr ValueCache::Get() const
{
    Synchronizer synchronizer();
}

HTH.

-- 

Regards,

Travis Spencer
Portland, OR USA


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux