//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// 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; } // allgemeiner Fall
T getData() const { return data_; } // allgemeiner Fall
};
template<> // Spezialisierung
void MyContainer<std::string>::setData(const std::string& d) {
data_ = "[" + d + "]";
}
int main() {
MyContainer<std::string> mcString;
mcString.setData("Geschichte");
std::cout << mcString.getData() << '\n'; // Ausgabe: [Geschichte]
MyContainer<int> mcInt;
mcInt.setData(5);
std::cout << mcInt.getData() << '\n'; // Ausgabe: 5
}