
This prevent the symbols from being both externally available and hidden, which causes them to be linked incorrectly. This is only a problem when the address of the function is explicitly taken since it will always be inlined otherwise. This patch fixes the issues that caused r285456 to be reverted, and can now be reapplied. llvm-svn: 285531
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
|
// Source Licenses. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// UNSUPPORTED: c++98, c++03
|
|
|
|
// <string>
|
|
|
|
// ~basic_string() // implied noexcept;
|
|
|
|
#include <string>
|
|
#include <cassert>
|
|
|
|
#include "test_macros.h"
|
|
#include "test_allocator.h"
|
|
|
|
template <class T>
|
|
struct some_alloc
|
|
{
|
|
typedef T value_type;
|
|
some_alloc(const some_alloc&);
|
|
~some_alloc() noexcept(false);
|
|
};
|
|
|
|
// Test that it's possible to take the address of basic_string's destructors
|
|
// by creating globals which will register their destructors with cxa_atexit.
|
|
std::string s;
|
|
std::wstring ws;
|
|
|
|
int main()
|
|
{
|
|
{
|
|
typedef std::string C;
|
|
static_assert(std::is_nothrow_destructible<C>::value, "");
|
|
}
|
|
{
|
|
typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
|
|
static_assert(std::is_nothrow_destructible<C>::value, "");
|
|
}
|
|
{
|
|
typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
|
|
LIBCPP_STATIC_ASSERT(!std::is_nothrow_destructible<C>::value, "");
|
|
}
|
|
}
|