title: Exhaustiveness check for pattern matching in Scala 2.11
body: <p>We have some pattern matching code where we would expect to be warned by the compiler that the match is not exhaustive, but we get none. Are there some cases where the exhaustiveness check can't be done?</p>
  
  <p>E.g Our example (using scalactic Good+Bad):</p>
  
  <pre><code>(maybeModelIdOrFailure, maybeMake) match {
  
      case (Some(Good(modelId)), Some(makeId)) if modelId &gt;= 0 &amp;&amp; taxonomyService.isValidModel(makeId, modelId) =&gt;
        Good(Some(MakeModelParameters(makeId, Some(modelId), modelLineId = None, index)))
  
      case (Some(Good(modelLineId)), Some(makeId)) if modelLineId &lt; 0 &amp;&amp; taxonomyService.isValidModelLine(makeId, -1 * modelLineId) =&gt;
        Good(Some(MakeModelParameters(makeId, modelId = None, modelLineId = Some(-1 * modelLineId), index)))
  
      case (Some(Good(modelOrModelLineId)), Some(makeId)) =&gt;
        Bad(One(IdNotFound(modelIdKeyName, modelOrModelLineId)))
  
      case (Some(Good(modelId)), None) if modelId &gt;= 0 =&gt;
        Bad(One(IdInvalid(modelIdKeyName, "Model Id without Make Id")))
  
      case (Some(Good(modelLineId)), None) if modelLineId &lt; 0 =&gt;
        Bad(One(IdInvalid(modelIdKeyName, "Model Line Id without Make Id")))
  
      case (None, Some(makeId)) =&gt; Good(Some(MakeModelParameters(makeId, None, None, index)))
  
      // case (None, None) =&gt; Good(None)
  
      // case (Some(Bad(invalidParams)), _) =&gt; Bad(One(invalidParams))
    }
  </code></pre>
  
  <p>We commented the last two lines, but the compiler doesn't warn and we didn't disable any checks.</p>