| // { dg-do run { target c++14 } } |
| // { dg-require-effective-target net_ts_ip } |
| // { dg-add-options net_ts } |
| |
| #include <experimental/internet> |
| #include <cstring> |
| #include <testsuite_hooks.h> |
| |
| using namespace std::experimental::net; |
| |
| void |
| test_extensible() |
| { |
| #if __cplusplus >= 202002L |
| static_assert(ip::tcp::endpoint().capacity() == sizeof(sockaddr_in6), |
| "ip::tcp::endpoint::capacity() can store a sockaddr_in6"); |
| #else |
| VERIFY( ip::tcp::endpoint().capacity() == sizeof(sockaddr_in6) ); |
| #endif |
| |
| ip::tcp::endpoint t1(ip::tcp::v4(), 22); |
| VERIFY(t1.size() == sizeof(sockaddr_in)); |
| t1.resize(sizeof(sockaddr_in)); |
| try { |
| t1.resize(2 * sizeof(sockaddr_in)); |
| VERIFY(false); |
| } catch (const std::length_error&) { |
| } |
| |
| ip::tcp::endpoint t2(ip::tcp::v6(), 80); |
| VERIFY(t2.size() == sizeof(sockaddr_in6)); |
| t2.resize(sizeof(sockaddr_in6)); |
| try { |
| t2.resize(2 * sizeof(sockaddr_in6)); |
| VERIFY(false); |
| } catch (const std::length_error&) { |
| } |
| |
| ip::tcp::endpoint t3; |
| std::memcpy(t3.data(), t1.data(), t1.size()); |
| t3.resize(t1.size()); |
| VERIFY( t3 == t1 ); |
| std::memcpy(t3.data(), t2.data(), t2.size()); |
| t3.resize(t2.size()); |
| VERIFY( t3 == t2 ); |
| } |
| |
| int main() |
| { |
| test_extensible(); |
| } |