czytałem w http://en.cppreference.com/w/cpp/language/operators:Zwarcie przeciążonego operatora && i || W C++ 17
operatorów logicznych logicznych, operatora & & i operator ||
przeciwieństwie do wbudowany w wersjach przeciążenia nie sekwencjonowania ich lewy operand przed prawą, a (do C++ 17) nie może implementować zwierać ocenę.
(Mój nacisk).
Nie można znaleźć żadnego zasobu lub kodu przykładowego dla C++ 17 obsługującego zwarcie dla operatora & & i operatora ||. Czy jest to związane z wyrażeniem krotności pakunku parametrów C++ 17? próbował grać, ale nie mógł wywołać zwarcia w przypadku przeciążonego operatora: & & i || z 17-krotnym wyrażeniem C++.
Kod:
class A {
bool val;
public:
A(bool b) : val(b) { cout << "A born as " << boolalpha << val << endl;}
template<typename ...Args>
bool operator&&(Args&&... args) {
return (val && ... && args.val);
}
};
int main() {
cout << boolalpha;
cout << (A{false} && A{true}) << endl;
cout << (A{true} && A{false}) << endl;
cout << (A{false} && A{false}) << endl;
}
wyjściowa:
A born as true
A born as false
false
A born as false
A born as true
false
A born as false
A born as false
false
http://coliru.stacked-crooked.com/a/f0b5325899c2fe6b
Uwaga: sekwencja od lewej do prawej strony nie jest też dzieje się w aktualnej wersji gcc, skompilowane z C++ 17 flaga.
Pokaż, co próbujesz, ale nie działa. Być może możesz wybrać odpowiedni kompilator i wersję [tutaj] (https://godbolt.org/) i opublikować link. – wally
* Nie można utworzyć zachowania zwarcia * Jaki był błąd? Czy nie było żadnego błędu i czy pojawiły się efekty uboczne, które przejawiały się u dalszych operatorów? A może przejrzałeś kod i wkroczył on w innych operatorów? – wally
@Mus Pytanie dotyczy zachowania zdefiniowanego w standardzie, a nie kodu, który nie działa. – interjay