is_error_code_enum - error: specialization after instantiation
От: Patalog Россия  
Дата: 25.06.21 20:26
Оценка:
Всем привет!

#include <system_error>

#define FAIL

enum class status
{
    ok = 0, fail = 1
};

inline
status get(status s1, status s2)
{
    return
#if defined(FAIL)
        std::min(s1, s2);
#else
    s1;
#endif
}

namespace std
{
    template <>
    struct is_error_code_enum<status>
        : true_type
    {};
}

int main()
{
    return 0;
}


gcc 9.3 -O3 -std=gnu++14

source>:24:12: error: specialization of 'std::is_error_code_enum<status>' after instantiation
24 | struct is_error_code_enum<status>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:24:12: error: redefinition of 'struct std::is_error_code_enum<status>'
In file included from <source>:1:
/opt/compiler-explorer/gcc-9.3.0/include/c++/9.3.0/system_error:53:12: note: previous definition of 'struct std::is_error_code_enum<status>'
53 | struct is_error_code_enum : public false_type { };
| ^~~~~~~~~~~~~~~~~~
Compiler returned: 1


godbolt
Не воспроизводится при -O0 или -std=gnu++11 или если закомментрировать FAIL
В чем я не прав?


29.06.21 16:00: Перенесено из 'C/C++'
29.06.21 16:00: Перенесено из 'C/C++'
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.