Every ratified ANSI and ISO C++ standard, and every working draft, describes this, although the precise wording changes between versions.
For example, according to the "Working Draft, Standard for Programming Language C++", document number N4659, dated 2017-03-21, Section 16.5.7 "Increment and decrement [over.inc]", para 1
The user-defined function called operator++ implements the prefix and postfix ++ operator. If this function is a non-static member function with no parameters, or a non-member function with one parameter, it defines the prefix increment operator ++ for objects of that type. If the function is a non-static member function with one parameter (which shall be of type int) or a non-member function with two parameters (the second
  of which shall be of type int), it defines the postfix increment operator ++ for objects of that type. When the postfix increment is called as a result of using the ++ operator, the int argument will have value zero.
At the end of the preceding para, there is a reference to footnote 134, which says
Calling operator++ explicitly, as in expressions like a.operator++(2), has no special properties: The argument to operator++ is 2.
After para 1, the standard even provides an example.
[ Example:
struct X {
    X& operator++(); // prefix ++a
    X operator++(int); // postfix a++
};
struct Y { };
  Y& operator++(Y&); // prefix ++b
  Y operator++(Y&, int); // postfix b++
void f(X a, Y b) {
    ++a; // a.operator++();
    a++; // a.operator++(0);
    ++b; // operator++(b);
    b++; // operator++(b, 0);
    a.operator++(); // explicit call: like ++a;
      a.operator++(0); // explicit call: like a++;
      operator++(b); // explicit call: like ++b;
      operator++(b, 0); // explicit call: like b++;
}
— end example ]
Para 2 then goes on to say
The prefix and postfix decrement operators -- are handled analogously.