История изменений
Исправление
kvpfs,
(текущая версия)
:
Глупость, всё зависит от реализации, вот на коленках сделал:
$ cat 1.cpp
#include <unordered_map>
#include <vector>
using namespace std;
template<typename T>
concept Hashable = requires(T a) {
{ std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
};
template <Hashable K, typename V>
class Um : public unordered_map<K, V> {
};
int main() {
Um<vector<int>, int> m;
}
$ clang++ -std=c++20 1.cpp
1.cpp:15:2: error: constraints not satisfied for class template 'Um' [with K = std::vector<int>, V = int]
Um<vector<int>, int> m;
^~~~~~~~~~~~~~~~~~~~
1.cpp:10:11: note: because 'std::vector<int>' does not satisfy 'Hashable'
template <Hashable K, typename V>
^
1.cpp:7:20: note: because 'std::hash<T>({})(a)' would be invalid: temporary of type '__hash_enum<std::vector<int>>' has private destructor
{ std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
^
1 error generated.
Так что всё зависит от желания причесать libstdc++, учитывая переход на модули std либы - её и так будут причесывать, может и здесь что сдвинется.
Исходная версия
kvpfs,
:
Глупость, всё зависит от реализации, вот на коленках сделал:
$ cat 1.cpp
#include <unordered_map>
#include <vector>
using namespace std;
template<typename T>
concept Hashable = requires(T a) {
{ std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
};
template <Hashable K, typename V>
class Um : public unordered_map<K, V> {
};
int main() {
Um<vector<int>, int> m;
}
$ clang++ -std=c++20 1.cpp
1.cpp:15:2: error: constraints not satisfied for class template 'Um' [with K = std::vector<int>, V = int]
Um<vector<int>, int> m;
^~~~~~~~~~~~~~~~~~~~
1.cpp:10:11: note: because 'std::vector<int>' does not satisfy 'Hashable'
template <Hashable K, typename V>
^
1.cpp:7:20: note: because 'std::hash<T>({})(a)' would be invalid: temporary of type '__hash_enum<std::vector<int>>' has private destructor
{ std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
^
1 error generated.
Так что всё зависит от желания причесать libstdc++, учитывая переход на модули std либы - её будут причесывать.