# This file has been imported into the Kudu source tree from the IWYU source
# tree as of version 0.13:
#   https://github.com/include-what-you-use/include-what-you-use/blob/master/libcxx.imp
# and corresponding license has been added:
#   https://github.com/include-what-you-use/include-what-you-use/blob/master/LICENSE.TXT
#
# ==============================================================================
# LLVM Release License
# ==============================================================================
# University of Illinois/NCSA
# Open Source License
# 
# Copyright (c) 2003-2010 University of Illinois at Urbana-Champaign.
# All rights reserved.
# 
# Developed by:
# 
#     LLVM Team
# 
#     University of Illinois at Urbana-Champaign
# 
#     http://llvm.org
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal with
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
# of the Software, and to permit persons to whom the Software is furnished to do
# so, subject to the following conditions:
# 
#     * Redistributions of source code must retain the above copyright notice,
#       this list of conditions and the following disclaimers.
# 
#     * Redistributions in binary form must reproduce the above copyright notice,
#       this list of conditions and the following disclaimers in the
#       documentation and/or other materials provided with the distribution.
# 
#     * Neither the names of the LLVM Team, University of Illinois at
#       Urbana-Champaign, nor the names of its contributors may be used to
#       endorse or promote products derived from this Software without specific
#       prior written permission.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
# SOFTWARE.

# libc++ headers
[
  { include: ["<__functional_base>", private, "<functional>", public ] },
  { include: ["<__mutex_base>", private, "<mutex>", public ] },
  { symbol: [ "std::declval", private, "<utility>", public ] },
  { symbol: [ "std::forward", private, "<utility>", public ] },
  { symbol: [ "std::move", private, "<utility>", public ] },
  { symbol: [ "std::nullptr_t", private, "<cstddef>", public ] },
  { symbol: [ "std::string", private, "<string>", public ] },
]
