#include <iostream>
using namespace std;

class BaseClass
{
public:
  virtual std::string ClassName()
  {
    return "BaseClass";
  }
};

class DerivedClass : public BaseClass
{
public:
  std::string ClassName() override
  {
     return "DerivedClass";
  }
};

template<class cT>
std::string StatusPrint ( cT object, const std::string& message)
{
  return object.ClassName(); // Here's where my issue arises.
}

int main() {
	DerivedClass test; 
	cout<< StatusPrint(test, "test"s)<<endl;
	//cout<< StatusPrint<DerivedClass>("test"s)<<endl;
	return 0;
}