| Index: base/metrics/histogram_macros_internal.h | 
| diff --git a/base/metrics/histogram_macros_internal.h b/base/metrics/histogram_macros_internal.h | 
| index c107a4729d26243d6e81d510e03fb769abb137aa..1bc68c6cac3ef71a68453219787d3ca217b3b03e 100644 | 
| --- a/base/metrics/histogram_macros_internal.h | 
| +++ b/base/metrics/histogram_macros_internal.h | 
| @@ -140,10 +140,14 @@ | 
| #define INTERNAL_HISTOGRAM_ENUMERATION_WITH_FLAG(name, sample, boundary, flag) \ | 
| do {                                                                         \ | 
| static_assert(                                                             \ | 
| -        !std::is_enum<decltype(sample)>::value ||                              \ | 
| -            !std::is_enum<decltype(boundary)>::value ||                        \ | 
| -            std::is_same<std::remove_const<decltype(sample)>::type,            \ | 
| -                         std::remove_const<decltype(boundary)>::type>::value,  \ | 
| +        !std::is_enum<std::decay<decltype(boundary)>::type>::value ||          \ | 
| +            std::is_enum<std::decay<decltype(sample)>::type>::value,           \ | 
| +        "Unexpected: |boundary| is enum, but |sample| is not.");               \ | 
| +    static_assert(                                                             \ | 
| +        !std::is_enum<std::decay<decltype(sample)>::type>::value ||            \ | 
| +            !std::is_enum<std::decay<decltype(boundary)>::type>::value ||      \ | 
| +            std::is_same<std::decay<decltype(sample)>::type,                   \ | 
| +                         std::decay<decltype(boundary)>::type>::value,         \ | 
| "|sample| and |boundary| shouldn't be of different enums");            \ | 
| static_assert(                                                             \ | 
| static_cast<uintmax_t>(boundary) <                                     \ | 
|  |