Я попытался написать оператор, который может использоваться как префикс, так и постфиксный оператор
#include <iostream>
#include <utility>
struct B {
// ...
};
template<typename ...T>
void operator++(B, T...) {
std::cout << ((sizeof...(T) == 0) ? "prefix" : "postfix") << std::endl;
}
int main() {
B b;
b++;
++b;
}
GCC компилируется и отлично работает с этим, но clang говорит
main.cpp: 9: 24: ошибка: параметр перегруженного оператора post-increment должен иметь тип 'int' (не 'T...')
void operator++(B, T...) {
Кто прав?
Спасибо, кто помог мне понять поведение GCC. Я отправил новый отчет об ошибке Clang: