<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - clang format misinterprets less-than-operator inside template declaration with enable_if"
   href="https://bugs.llvm.org/show_bug.cgi?id=32208">32208</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>clang format misinterprets less-than-operator inside template declaration with enable_if
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>4.0
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Formatter
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>per.ola.nilsson@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>djasper@google.com, klimek@google.com, llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>clang-format seems to misinterpret less-than operator inside enable_if. First
manually formatted code, where enable_if aligns between the two functions:

$ cat for_each_tuple_indexed.h 
#pragma once
#include <tuple>
#include <utility>

template <std::size_t I = 0, typename FuncT, typename... Tp>
inline typename std::enable_if<I == sizeof...(Tp), void>::type
for_each_indexed(
    const std::tuple<Tp...> &,
    FuncT &&) { // recursion terminal case, I is equal to length of tuple
}

template <std::size_t I = 0, typename FuncT, typename... Tp>
inline typename std::enable_if<I < sizeof...(Tp), void>::type for_each_indexed(
    const std::tuple<Tp...> &t,
    FuncT &&f) {
  std::forward<FuncT>(f)(std::get<I>(t), I);
  for_each_indexed<I + 1, FuncT, Tp...>(t, std::forward<FuncT>(f));
}

====== 

$ clang-format-4.0 -style=llvm  for_each_tuple_indexed.h 
#pragma once
#include <tuple>
#include <utility>

template <std::size_t I = 0, typename FuncT, typename... Tp>
inline typename std::enable_if<I == sizeof...(Tp), void>::type
for_each_tuple_indexed(
    const std::tuple<Tp...> &,
    FuncT &&) { // recursion terminal case, I is equal to length of tuple
}

template <std::size_t I = 0, typename FuncT, typename... Tp>
    inline typename std::enable_if <
    I<sizeof...(Tp), void>::type
    for_each_tuple_indexed(const std::tuple<Tp...> &t, FuncT &&f) {
  std::forward<FuncT>(f)(std::get<I>(t), I);
  for_each_indexed<I + 1, FuncT, Tp...>(t, std::forward<FuncT>(f));
}</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>