// https://godbolt.org/z/M6earoWMn
#include <iostream>
#include <string>
#include <concepts> // copyable, C++20
template <std::copyable T>
class MyContainer {
T data_;
public:
void setData(const T& d) { data_ = d; } // general case
T getData() const { return data_; } // general case
};
template<> // Specialization
void MyContainer<std::string>::setData(const std::string& d) {
data_ = "[" + d + "]";
}
int main() {
MyContainer<std::string> mcString;
mcString.setData("History");
std::cout << mcString.getData() << '\n'; // Output: [History]
MyContainer<int> mcInt;
mcInt.setData(5);
std::cout << mcInt.getData() << '\n'; // Output: 5
}