forked from microsoft/GSL
Fix std::hash compilation error for gsl::not_null<std::shared_ptr<T>> (#1210)
* Initial plan for issue * Fix hash compilation issue for gsl::not_null with shared_ptr Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com> * Add comment explaining safe usage of typename T::element_type in not_null_hash Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com> * Initial plan for issue * Remove upgrade_checklist.md file as requested Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com> * restore docs/upgrade_checklist.md --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: carsonRadtke <10507970+carsonRadtke@users.noreply.github.com> Co-authored-by: Carson Radtke <carsonradtke@microsoft.com>
This commit is contained in:
co-authored by
carsonRadtke
copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Carson Radtke
parent
c31617f56a
commit
1883887359
@@ -231,7 +231,8 @@ template <class T>
|
||||
not_null<T> operator+(std::ptrdiff_t, const not_null<T>&) = delete;
|
||||
|
||||
|
||||
template <class T, class U = decltype(std::declval<const T&>().get()), bool = std::is_default_constructible<std::hash<U>>::value>
|
||||
// T is conceptually a pointer so we don't have to worry about it being a reference and violating std::hash requirements
|
||||
template <class T, class U = typename T::element_type, bool = std::is_default_constructible<std::hash<U>>::value>
|
||||
struct not_null_hash
|
||||
{
|
||||
std::size_t operator()(const T& value) const { return std::hash<U>{}(value.get()); }
|
||||
|
||||
Reference in New Issue
Block a user