llvm/clang-tools-extra/test/clang-tidy/checkers/readability/braces-around-statements-constexpr-if-templates.cpp

// RUN: %check_clang_tidy %s readability-braces-around-statements %t -- -- -std=c++17

void handle(bool);

template <bool branch>
void shouldFail() {
  if constexpr (branch)
  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: statement should be inside braces [readability-braces-around-statements]
    handle(true);
  else
  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: statement should be inside braces [readability-braces-around-statements]
    handle(false);
}

template <bool branch>
void shouldPass() {
  if constexpr (branch) {
    handle(true);
  } else {
    handle(false);
  }
}

void shouldFailNonTemplate() {
  constexpr bool branch = false;
  if constexpr (branch)
  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: statement should be inside braces [readability-braces-around-statements]
    handle(true);
  else
  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: statement should be inside braces [readability-braces-around-statements]
    handle(false);
}

void shouldPass() {
  constexpr bool branch = false;
  if constexpr (branch) {
    handle(true);
  } else {
    handle(false);
  }
}

void run() {
    shouldFail<true>();
    shouldFail<false>();
    shouldPass<true>();
    shouldPass<false>();
}