I have this code in 3 files:
ResourceCounter.h
#ifndef RESOURCE_COUNTER_H_
#define RESOURCE_COUNTER_H_
template<typename Resource_t>
class ResourceCounter
{
public:
ResourceCounter(Resource_t max_, Resource_t consumed_ = 0);
bool canConsume(Resource_t toConsume_ = 1) const;
bool consume(Resource_t toConsume_ = 1);
void free();
private:
Resource_t m_max;
Resource_t m_consumed;
};
#endif
ResourceCounter.cpp
#include "ResourceCounter.h"
template <typename Resource_t>
ResourceCounter<Resource_t>::ResourceCounter(Resource_t max_, Resource_t consumed_) :
m_max(max_),
m_consumed(consumed_)
{
}
template <typename Resource_t>
bool ResourceCounter<Resource_t>::canConsume(Resource_t toConsume_) const
{
return m_max >= m_consumed + toConsume_;
}
template <typename Resource_t>
bool ResourceCounter<Resource_t>::consume(Resource_t toConsume_)
{
if (m_max >= m_consumed + toConsume_)
{
m_consumed += toConsume_;
return true;
}
else
return false;
}
template <typename Resource_t>
void ResourceCounter<Resource_t>::free()
{
m_consumed = 0;
};
template ResourceCounter<int>;
main.cpp
#include <iostream>
#include <string>
#include "ResourceCounter.h"
int main(int argc, char* args[])
{
ResourceCounter<int> rc(5, 1);
return 0;
}
I can compile and run it with msvc, but when I’m trying to do this with mingw or g++, I get this error:
expected unqualified-id before «;» token
[build] 34 | template ResourceCounter<int>;
[build] | ^
It works if I instead define an unused function in ResourceCounter.cpp
that creates an object of this class with template parameters I need. Does g++ not support this syntax?
1