Случайно, я написал следующий интересный фрагмент:
#include <iostream>
#include <cstring>
size_t strlen(const char* str) {
    std::cout << "hello";
    return 0;
}
int main() {
    return std::strlen("sdf");
}
Неожиданно для меня вывод "hello" в GCC 5.1, что означает, что вызывается мой strlen. Еще более интересно, если я удалю return, т.е. Заменим main только вызовом std::strlen("sdf");, ничего не будет напечатано!
Я также пробовал Clang, для которого std::strlen вызывает реальную функцию, которая вычисляет длину строки (и ничего не печатается). Это то, что я ожидал увидеть.
Как это можно объяснить? Является ли определение моей собственной функции strlen рассмотренной поведением undefined?
