у меня например
#include <iostream>
template <typename T>
struct Base {};
template <>
struct Base<std::string> {
static const int value = true;
};
template <>
struct Base<std::string &> {
static const int value = true;
};
int main() {
bool a = Base<std::string>::value;
bool b = Base<std::string &>::value;
std::cout << a << b << std::endl;
}
https://godbolt.org/z/0NpYxB
Примечание. У меня есть две идентичные специализации, и я хотел бы сократить их до одной. Я знаю два решения, которые я предпочел бы не делать.
(1) Удалить ссылку на сайте вызова, чтобы требовалась только одна специализация.
(2) Создайте базовый класс и унаследуйте ссылку и без ссылки версии из этого.
Есть ли третий вариант, когда специализация является общей для ссылочных и не ссылочных типов?
Требуются решения C ++ 11.