// First comment
// Second comment

// First comment
// Second comment

// Issue #1134
class MyClass : public BaseClass
{
    //@{ BaseClass interface
#if VERY_LONG_AND_COMPLICATED_DEFINE
    void foo();
#endif // VERY_LONG_AND_COMPLICATED_DEFINE
    //@}
};

// Issue #1287
void foo()
{
#if defined(SUPPORT_FEATURE)
    bar();
#endif // SUPPORT_FEATURE
    // Handle error
    if (error != 0)
    {
    }

#if defined(SUPPORT_FEATURE)
    bar();
#endif // SUPPORT_FEATURE
    // Handle error
    // Handle error
    if (error != 0)
    {
    }

#   if defined(SUPPORT_FEATURE)
    bar();
#   endif // SUPPORT_FEATURE
          // SUPPORT_FEATURE
    // Handle error
    // Handle error
    if (error != 0)
    {
    }

#   if defined(SUPPORT_FEATURE)
    bar();
#   endif // SUPPORT_FEATURE
          // SUPPORT_FEATURE
    // Handle error
    // Handle error
    if (error != 0)
    {
    }

    #if defined(SUPPORT_FEATURE)
    bar();
    #endif /* SUPPORT_FEATURE
              SUPPORT_FEATURE */
    // Handle error
    // Handle error
    if (error != 0)
    {
    }
}

// ----- Some namespace scope --------------------------------------------------
// ----- FooNamespace scope ----------------------------------------------------
namespace FooNamespace
{
// ----- Some classes scope ----------------------------------------------------
// ----- FooClass scope --------------------------------------------------------
class FooClass
{
    using FooUsing = FooTemplate<
        param1,
        param2
        >; // FooTemplate
    // Foo description
    void foo()
    {
        if (a == b)
        {
// Col1 comment
// Col1 comment
// Col1 comment
            // Baz description
            baz(); // Baz trailing comment begin
                   // Baz trailing comment ...
                   // Baz trailing comment end
        } // if (a == b)
        // Bar description begin
        // Bar description ...
        // Bar description end
        bar(
            a,
            b
            ); // bar trailing comment begin
               // bar trailing comment ...
               // Baz trailing comment end
        /*! Baz description begin
         * Baz description ...
         * Baz description end */
        baz(a,
            b); /* Baz trailing comment begin
                   Baz trailing comment ...
                   Baz trailing comment end */
        // Bar description
        bar(); // bar trailing comment begin
               // bar trailing comment ...
               // Baz trailing comment end

        // Baz description
        baz();
    }
    void bar();
    // Many methods
    void baz();
}; // FooClass
// ----- FooClass scope --------------------------------------------------------

// Many classes
// Many classes
// Many classes

class BazClass
{
    void foo();

// Many methods
// Many methods
// Many methods

// Overrides
// Overrides
//Overrides
protected:
    // Bar description
    void baz();
    //Overrides
}; // BazClass trailing comment begin
   // BazClass trailing comment ...
   // BazClass trailing comment end
// ----- Some classes scope ----------------------------------------------------
} // FooNamespace trailing comment begin
  // FooNamespace trailing comment end
// ----- FooNamespace scope ----------------------------------------------------
// BarNamespace description
namespace BarNamespace
{
} // namespace BarNamespace
// ----- Some namespace scope --------------------------------------------------
