Problem using std::mismatch with volatile * reduces to same problem with std::equal.
Template expansion does not match from include/algorithms because its addition of 'const' conflicts with 'volatile'
In file included from .../libcxx/test/std/algorithms/alg.nonmodifying/alg.equal/equal_type_qualifie\
r.pass.cpp:9:
.../libcxx/include/algorithm: In instantiation of ‘constexpr bool std::1::equal(_InputIterator1, \
_InputIterator1, _InputIterator2, _BinaryPredicate) [with _InputIterator1 = volatile char*; _InputIterator2 = volatile char*; _BinaryPredicate =\
std::1::equal_to<char, char>]’:
.../libcxx/include/algorithm:1275:24: required from ‘constexpr bool std::1::equal(_InputIterato\
r1, _InputIterator1, _InputIterator2) [with _InputIterator1 = volatile char*; _InputIterator2 = volatile char*]’
.../libcxx/test/std/algorithms/alg.nonmodifying/alg.equal/equal_type_qualifier.pass.cpp:17:3: req\
uired from here
.../libcxx/include/algorithm:1262:20: error: no match for call to ‘(std::1::equal_to<char, char\
) (volatile char&, volatile char&)’
1262 | if (!pred(*first1, *__first2))
| ~~~~~~^~~~~~~~~~~~~~~~~~~~~~
.../libcxx/include/algorithm:678:10: note: candidate: ‘constexpr bool std::1::equal_to<_T1, _T1\
::operator()(const _T1&, const _T1&) const [with _T1 = char]’ (near match)
678 | bool operator()(const _T1& __x, const _T1& __y) const {return __x == __y;} | ^~~~~~~~
.../libcxx/include/algorithm:678:10: note: conversion of argument 2 would be ill-formed:
.../libcxx/include/algorithm:1262:20: error: binding reference of type ‘const char&’ to ‘volatile c\
har’ discards qualifiers
1262 | if (!pred(*first1, *__first2))