Tính đến thời điểm viết bài, đưa ra một cppreference reasonably simple definition của std::in_place_t
gia đình:std :: in_place_t và bạn bè trong C++ 17
struct in_place_t {
explicit in_place_t() = default;
};
inline constexpr std::in_place_t in_place{};
template <class T>
struct in_place_type_t {
explicit in_place_type_t() = default;
};
template <class T>
inline constexpr std::in_place_type_t<T> in_place_type{};
template <size_t I> struct in_place_index_t {
explicit in_place_index_t() = default;
};
template <size_t I>
inline constexpr in_place_index_t<I> in_place_index{};
Tuy nhiên, dự thảo mới nhất của chuẩn C++ 17 linked from isocpp.org có định nghĩa phức tạp hơn (phần 20.2.7, trang 536):
struct in_place_tag {
in_place_tag() = delete;
};
using in_place_t = in_place_tag(&)(unspecified);
template <class T>
using in_place_type_t = in_place_tag(&)(unspecified <T>);
template <size_t I>
using in_place_index_t = in_place_tag(&)(unspecified <I>);
in_place_tag in_place(unspecified);
template <class T>
in_place_tag in_place(unspecified <T>);
template <size_t I>
in_place_tag in_place(unspecified <I>);
Phiên bản đầu tiên là đơn giản và dễ hiểu, nhưng phiên bản thứ hai khá mờ nhạt đối với tôi. Vì vậy, các câu hỏi:
Phiên bản nào là đúng, sau Issaqua (tháng 11 năm 2016)? (Có lẽ là thứ hai, nhưng có thể là N4606 vẫn chưa được cập nhật sau cuộc họp và cppreference mới nhất có.)
Rõ ràng điều này đã thay đổi tại một thời điểm nào đó; có ai có liên kết đến một bài báo đề cập đến sự thay đổi không?
Quan trọng nhất, bất kỳ ai cũng có thể giải thích cách phiên bản thứ hai được dự định hoạt động? Việc triển khai mẫu sẽ như thế nào?
Hoàn toàn không có cấu trúc, nhưng tôi _so_ không bận tâm rằng tôi đã dừng theo tiêu chuẩn C++. Thật là một mớ hỗn độn. –
@LightnessRacesinOrbit: Này, nó chứng minh quá trình tiêu chuẩn đã được cải thiện. Nhớ 'vector'? Điều đó thực sự đã được chuẩn hoá; điều này đã thực sự được hoàn nguyên. Vì vậy, đó là tiến bộ. –
FYI, cppreference có lịch sử sửa đổi bạn có thể kiểm tra và mọi bản nháp đang hoạt động được đề ngày trên trang đầu tiên. –