Using INT2/3 on Arduino Micro (Atmega32u4)
You problem isn't with your pins or code, but with debouncing the signals. I've changed the "func()" method to read:

void func()
{
  static uint32_t lastChange = 0; // Note millis() don't change inside ISR, but can be read
  if (millis() - lastChange &gt; 100)
  {
    state = !state;
  }
  lastChange = millis(); // Set new value
}


which will ignore spurious interrupts if they occur within 100ms of each other. This solves the issue that you are seeing, I've tested it on an Arduino Micro I have lying around.