У меня есть следующий код, который определяет size_t
, эквивалентный std::size_t
и ::size_t
, если я включил <cstddef>
.
// h.hpp
namespace N {
using size_t = decltype(sizeof(int));
}
// a.hpp
#include <h.hpp>
namespace N {
class C {
size_t size() const;
};
void f(size_t);
}
// ^^^ These use N::size_t!
Является ли это каким-либо образом нарушением стандарта C ++ и может ли это вызвать любые ошибки в любом коде, который использует как эти заголовки, так и любой другой стандартный заголовок, который определяет std::size_t
и ::size_t
? Я бы рассмотрел Это также ошибка, если кто-то не может использовать std::size_t
и N::size_t
взаимозаменяемо в любом контексте или если использовать просто size_t
в любом контексте, это может привести к неопределенности.
// someOtherFile.cpp
#include <a.hpp>
#include <cstdint>
namespace N {
// Can there be any problem here? (Inside N::)
}
// Or here? (Outside N::)
Я думаю, что нет, потому что и my, и стандартный size_t
являются просто псевдонимами типа unsigned long (long) int