Running gcc v3.4.6 on the Botan v1.8.8 I get the following compile time error building my application after successfully building Botan and running its self test:
../../src/Botan-1.8.8/build/include/botan/secmem.h: In member function `Botan::MemoryVector<T>& Botan::MemoryVector<T>::operator=(const Botan::MemoryRegion<T>&)':
../../src/Botan-1.8.8/build/include/botan/secmem.h:310: error: missing template arguments before '(' token
What is this compiler error telling me? Here is a snippet of secmem.h that includes line 310:
[...]
/**
* This class represents variable length buffers that do not
* make use of memory locking.
*/
template<typename T>
class MemoryVector : public MemoryRegion<T>
{
public:
/**
* Copy the contents of another buffer into this buffer.
* @param in the buffer to copy the contents from
* @return a reference to *this
*/
MemoryVector<T>& operator=(const MemoryRegion<T>& in)
{ if(this != &in) set(in); return (*this); } // This is line 310!
[...]
Change it to this:
{ if(this != &in) this->set(in); return (*this); }
I suspect that the set
function is defined in the base-class? Unqualified names are not looked up in a base class that depends on a template parameter. So in this case, the name set
is probably associated with the std::set
template which requires template arguments.
If you qualify the name with this->
, the compiler is explicitly told to look into the scope of the class, and includes dependent base classes in that lookup.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With