Does c++ standard allow to call std::align with zero size and obtain a past-the-end pointer?

Does std::align allow to be called with zero size and obtain an aligned pointer that may be a past-the-end pointer?

For example:

#include <cstdio>
#include <memory>

int main() {
  alignas(16) char buffer[16];
  printf("buffer: %p ~ %pn",
      static_cast<void*>(buffer),
      static_cast<void*>(buffer + sizeof(buffer)));
  void* start = buffer + 10;
  std::size_t space = 6;
  printf("start=%p space=%zun", start, space);
  void* result = std::align(8, 0, start, space); // call with size=0
  printf("result=%p start=%p space=%zun", result, start, space);
  // result is a pase-the-end pointer
}

Answer

Does c++ standard allow to call std::align with zero size

Yes; there is no precondition disallowing zero size.

and obtain a past-the-end pointer?

Obtaining a one-past-the-end pointer is allowed.