text: //===--- MakeUniqueCheck.cpp - clang-tidy----------------------------------===//
  //
  //                     The LLVM Compiler Infrastructure
  //
  // This file is distributed under the University of Illinois Open Source
  // License. See LICENSE.TXT for details.
  //
  //===----------------------------------------------------------------------===//
  
  #include "MakeUniqueCheck.h"
  
  using namespace clang::ast_matchers;
  
  namespace clang {
  namespace tidy {
  namespace modernize {
  
  MakeUniqueCheck::MakeUniqueCheck(StringRef Name,
                                   clang::tidy::ClangTidyContext *Context)
      : MakeSmartPtrCheck(Name, Context, "std::make_unique"),
        RequireCPlusPlus14(Options.get("MakeSmartPtrFunction", "").empty()) {}
  
  MakeUniqueCheck::SmartPtrTypeMatcher
  MakeUniqueCheck::getSmartPointerTypeMatcher() const {
    return qualType(hasUnqualifiedDesugaredType(
        recordType(hasDeclaration(classTemplateSpecializationDecl(
            hasName("::std::unique_ptr"), templateArgumentCountIs(2),
            hasTemplateArgument(
                0, templateArgument(refersToType(qualType().bind(PointerType)))),
            hasTemplateArgument(
                1, templateArgument(refersToType(
                       qualType(hasDeclaration(classTemplateSpecializationDecl(
                           hasName("::std::default_delete"),
                           templateArgumentCountIs(1),
                           hasTemplateArgument(
                               0, templateArgument(refersToType(qualType(
                                      equalsBoundNode(PointerType))))))))))))))));
  }
  
  bool MakeUniqueCheck::isLanguageVersionSupported(
      const LangOptions &LangOpts) const {
    return RequireCPlusPlus14 ? LangOpts.CPlusPlus14 : LangOpts.CPlusPlus11;
  }
  
  } // namespace modernize
  } // namespace tidy
  } // namespace clang
  